コード例 #1
0
ファイル: fmq_server.c プロジェクト: JuanCerezuela/filemq
//  Client hash function that checks if client is alive
static int
client_ping (const char *key, void *client, void *argument)
{
    client_t *self = (client_t *) client;
    //  Expire client if it's not answered us in a while
    if (zclock_time () >= self->expires_at && self->expires_at) {
        //  In case dialog doesn't handle expired_event by destroying
        //  client, set expires_at to zero to prevent busy looping
        self->expires_at = 0;
        server_client_execute ((server_t *) argument, self, expired_event);
    }
    else
    //  Check whether to send heartbeat to client
    if (zclock_time () >= self->heartbeat_at) {
        server_client_execute ((server_t *) argument, self, heartbeat_event);
        self->heartbeat_at = zclock_time () + self->heartbeat;
    }
    return 0;
}
コード例 #2
0
ファイル: fmq_server.c プロジェクト: asgibbons/filemq
static void
server_client_message (server_t *self)
{
    fmq_msg_t *request = fmq_msg_recv (self->router);
    if (!request)
        return;         //  Interrupted; do nothing

    char *hashkey = zframe_strhex (fmq_msg_address (request));
    client_t *client = (client_t *) zhash_lookup (self->clients, hashkey);
    if (client == NULL) {
        client = client_new (fmq_msg_address (request));
        client->heartbeat = self->heartbeat;
        client->router = self->router;
        zhash_insert (self->clients, hashkey, client);
        zhash_freefn (self->clients, hashkey, client_free);
    }
    free (hashkey);
    if (client->request)
        fmq_msg_destroy (&client->request);
    client->request = request;

    //  Any input from client counts as heartbeat
    client->heartbeat_at = zclock_time () + client->heartbeat;
    //  Any input from client counts as activity
    client->expires_at = zclock_time () + client->heartbeat * 3;
    
    if (fmq_msg_id (request) == FMQ_MSG_OHAI)
        server_client_execute (self, client, ohai_event);
    else
    if (fmq_msg_id (request) == FMQ_MSG_ICANHAZ)
        server_client_execute (self, client, icanhaz_event);
    else
    if (fmq_msg_id (request) == FMQ_MSG_NOM)
        server_client_execute (self, client, nom_event);
    else
    if (fmq_msg_id (request) == FMQ_MSG_HUGZ)
        server_client_execute (self, client, hugz_event);
    else
    if (fmq_msg_id (request) == FMQ_MSG_KTHXBAI)
        server_client_execute (self, client, kthxbai_event);
}
コード例 #3
0
ファイル: fmq_server.c プロジェクト: JuanCerezuela/filemq
//  Client hash function that checks if client is alive
static int
client_dispatch (const char *key, void *client, void *server)
{
    server_client_execute ((server_t *) server, (client_t *) client, dispatch_event);
    return 0;
}