/*
 * Create a new connection to the FAM daemon.
 *
 * Raises an ArgumentError exception if the number of arguments is not 0
 * or 1, or a Fam::Error exception if a connection to FAM could not
 * be established.
 *
 * Examples:
 *   # connect and tell FAM the application is named 'foo'
 *   fam = Fam::Connection.new 'foo'
 *
 *   # just connect
 *   fam = Fam::Connection.new
 *
 */
static VALUE fam_conn_init(int argc, VALUE *argv, VALUE self)
{
  FAMConnection *conn;
  int err = 0;

  Data_Get_Struct(self, FAMConnection, conn);
  switch (argc) {
    case 0:
      err = FAMOpen(conn);
      break;
    case 1:
      err = FAMOpen2(conn, RSTRING(argv[0])->ptr);
      break;
    default:
      rb_raise(rb_eArgError, "invalid argument count (not 0 or 1)");
  }
  
  if (err == -1) {
    rb_raise(eError, "Couldn't open FAM connection: %s", fam_error());
  }

  return self;
}