/* * call-seq: * connect(target, [private_name], [all_messages]) -> nil * * Connect to Spread. +target+ specifies which Spread daemon to * connect to. It must be a string in the form "port", * "port@hostname", or "port@ip". * * +private_name+ is the name of this connection. It must be unique * among all the connections to a given Spread daemon. If not * specified, Spread will assign a randomly-generated unique private * name. * * +all_messages+ indicates whether this connection should receive all * Spread messages, or just data messages. The default is +true+ (so * all messages will be received). * * If this Spread::Connection instance is presently connected, it will * first be silently disconnected. */ static VALUE spconn_connect(int argc, VALUE *argv, VALUE obj) { VALUE host_str; VALUE name_str; VALUE all_msgs; char *c_name_str; struct SpreadConnection *sp_conn; int n; Data_Get_Struct(obj, struct SpreadConnection, sp_conn); rb_scan_args(argc, argv, "12", &host_str, &name_str, &all_msgs); if (NIL_P(name_str)) c_name_str = NULL; else c_name_str = StringValuePtr(name_str); if (NIL_P(all_msgs)) all_msgs = Qtrue; /* receive all messages by default */ /* If we're currently connected, silently disconnect first */ if (sp_conn->connected) spconn_disconnect(obj); SafeStringValue(host_str); if ((n = SP_connect(RSTRING(host_str)->ptr, c_name_str, 0, /* ignored */ BOOL2INT(all_msgs), &sp_conn->mbox, sp_conn->private_group)) < 0) raise_sp_error(n); snprintf(sp_conn->spread_name, MAX_PROC_NAME, "%s", RSTRING(host_str)->ptr); sp_conn->connected = true; return Qnil; }