int main (int argc, char *argv []) { puts (PRODUCT); puts (COPYRIGHT); puts (NOWARRANTY); fmq_server_t *server = NULL; fmq_client_t *client = NULL; if (argc < 2 || streq (argv [1], "-s")) { server = fmq_server_new (); fmq_server_configure (server, "server_test.cfg"); fmq_server_publish (server, "./fmqroot/send", "/"); fmq_server_publish (server, "./fmqroot/logs", "/logs"); // We do this last fmq_server_bind (server, "tcp://*:6000"); } if (argc < 2 || streq (argv [1], "-c")) { client = fmq_client_new (); fmq_client_configure (client, "client_test.cfg"); fmq_client_setoption (client, "client/inbox", "./fmqroot/recv"); fmq_client_connect (client, "tcp://localhost:6000"); fmq_client_subscribe (client, "/"); fmq_client_subscribe (client, "/photos"); fmq_client_subscribe (client, "/logs"); } while (!zctx_interrupted) sleep (1); puts ("interrupted"); fmq_server_destroy (&server); fmq_client_destroy (&client); return 0; }
int fmq_client_test (bool verbose) { printf (" * fmq_client: "); fmq_client_t *self; // Run selftest using 'client_test.cfg' configuration self = fmq_client_new (); assert (self); fmq_client_configure (self, "client_test.cfg"); fmq_client_connect (self, "tcp://localhost:6001"); sleep (1); fmq_client_destroy (&self); printf ("OK\n"); return 0; }
int main (int argc, char *argv []) { if (argc < 3) { puts ("usage: track original-directory tracking-directory"); return 0; } fmq_server_t *server = fmq_server_new (); fmq_server_configure (server, "anonymous.cfg"); fmq_server_publish (server, argv [1], "/"); fmq_server_set_anonymous (server, true); fmq_server_bind (server, "tcp://*:5670"); fmq_client_t *client = fmq_client_new (); fmq_client_set_inbox (client, argv [2]); fmq_client_set_resync (client, true); fmq_client_subscribe (client, "/"); fmq_client_connect (client, "tcp://localhost:5670"); while (true) { // Get message from fmq_client API zmsg_t *msg = fmq_client_recv (client); if (!msg) break; // Interrupted char *command = zmsg_popstr (msg); if (streq (command, "DELIVER")) { char *filename = zmsg_popstr (msg); char *fullname = zmsg_popstr (msg); printf ("I: received %s (%s)\n", filename, fullname); free (filename); free (fullname); } free (command); zmsg_destroy (&msg); } fmq_server_destroy (&server); fmq_client_destroy (&client); return 0; }
int main (int argc, char *argv []) { bool verbose; if (argc == 2 && streq (argv [1], "-v")) { argc--; verbose = true; } else verbose = false; // Do normal checks if run without arguments if (argc < 2) { printf ("Running self tests...\n"); fmq_patch_test (verbose); fmq_dir_test (verbose); fmq_msg_test (verbose); fmq_sasl_test (verbose); fmq_hash_test (verbose); fmq_server_test (verbose); fmq_client_test (verbose); printf ("Tests passed OK\n"); return 0; } // Else run as FILEMQ server or client if (streq (argv [1], "-s")) { fmq_server_t *server = fmq_server_new (); fmq_server_configure (server, "server_test.cfg"); fmq_server_publish (server, "./fmqroot/send", "/"); fmq_server_publish (server, "./fmqroot/logs", "/logs"); // We do this last fmq_server_bind (server, "tcp://*:5670"); while (!zctx_interrupted) zclock_sleep (1000); fmq_server_destroy (&server); } else if (streq (argv [1], "-c")) { fmq_client_t *client = fmq_client_new (); fmq_client_configure (client, "client_test.cfg"); fmq_client_setoption (client, "client/inbox", "./fmqroot/recv"); fmq_client_set_resync (client, true); fmq_client_subscribe (client, "/photos"); fmq_client_subscribe (client, "/logs"); fmq_client_connect (client, "tcp://localhost:5670"); while (true) { // Get message from fmq_client API zmsg_t *msg = fmq_client_recv (client); if (!msg) break; // Interrupted char *command = zmsg_popstr (msg); if (streq (command, "DELIVER")) { char *filename = zmsg_popstr (msg); char *fullname = zmsg_popstr (msg); printf ("I: received %s (%s)\n", filename, fullname); free (filename); free (fullname); } free (command); zmsg_destroy (&msg); } fmq_client_destroy (&client); } return 0; }
static int agent_recv_from_peer (agent_t *self) { // Router socket tells us the identity of this peer zre_msg_t *msg = zre_msg_recv (self->inbox); if (msg == NULL) return 0; // Interrupted char *identity = zframe_strdup (zre_msg_address (msg)); // On HELLO we may create the peer if it's unknown // On other commands the peer must already exist zre_peer_t *peer = (zre_peer_t *) zhash_lookup (self->peers, identity); if (zre_msg_id (msg) == ZRE_MSG_HELLO) { peer = s_require_peer ( self, identity, zre_msg_ipaddress (msg), zre_msg_mailbox (msg)); assert (peer); zre_peer_ready_set (peer, true); } // Ignore command if peer isn't ready if (peer == NULL || !zre_peer_ready (peer)) { free(identity); zre_msg_destroy (&msg); return 0; } if (!zre_peer_check_message (peer, msg)) { zclock_log ("W: [%s] lost messages from %s", self->identity, identity); assert (false); } // Now process each command if (zre_msg_id (msg) == ZRE_MSG_HELLO) { // Join peer to listed groups char *name = zre_msg_groups_first (msg); while (name) { s_join_peer_group (self, peer, name); name = zre_msg_groups_next (msg); } // Hello command holds latest status of peer zre_peer_status_set (peer, zre_msg_status (msg)); // Store peer headers for future reference zre_peer_headers_set (peer, zre_msg_headers (msg)); // If peer is a ZRE/LOG collector, connect to it char *collector = zre_msg_headers_string (msg, "X-ZRELOG", NULL); if (collector) zre_log_connect (self->log, collector); // If peer is a FileMQ publisher, connect to it char *publisher = zre_msg_headers_string (msg, "X-FILEMQ", NULL); if (publisher) fmq_client_connect (self->fmq_client, publisher); } else if (zre_msg_id (msg) == ZRE_MSG_WHISPER) { // Pass up to caller API as WHISPER event zframe_t *cookie = zre_msg_content (msg); zstr_sendm (self->pipe, "WHISPER"); zstr_sendm (self->pipe, identity); zframe_send (&cookie, self->pipe, ZFRAME_REUSE); // let msg free the frame } else if (zre_msg_id (msg) == ZRE_MSG_SHOUT) { // Pass up to caller as SHOUT event zframe_t *cookie = zre_msg_content (msg); zstr_sendm (self->pipe, "SHOUT"); zstr_sendm (self->pipe, identity); zstr_sendm (self->pipe, zre_msg_group (msg)); zframe_send (&cookie, self->pipe, ZFRAME_REUSE); // let msg free the frame } else if (zre_msg_id (msg) == ZRE_MSG_PING) { zre_msg_t *msg = zre_msg_new (ZRE_MSG_PING_OK); zre_peer_send (peer, &msg); } else if (zre_msg_id (msg) == ZRE_MSG_JOIN) { s_join_peer_group (self, peer, zre_msg_group (msg)); assert (zre_msg_status (msg) == zre_peer_status (peer)); } else if (zre_msg_id (msg) == ZRE_MSG_LEAVE) { s_leave_peer_group (self, peer, zre_msg_group (msg)); assert (zre_msg_status (msg) == zre_peer_status (peer)); } free (identity); zre_msg_destroy (&msg); // Activity from peer resets peer timers zre_peer_refresh (peer); return 0; }