コード例 #1
0
ファイル: route.c プロジェクト: junaidk/uhub
int route_to_user(struct hub_info* hub, struct hub_user* user, struct adc_message* msg)
{
#ifdef DEBUG_SENDQ
	char* data = strndup(msg->cache, msg->length-1);
	LOG_PROTO("send %s: \"%s\"", sid_to_string(user->id.sid), data);
	free(data);
#endif

	if (!user->connection)
		return 0;

	uhub_assert(msg->cache && *msg->cache);

	if (ioq_send_is_empty(user->send_queue) && !user_flag_get(user, flag_pipeline))
	{
		/* Perform oportunistic write */
		ioq_send_add(user->send_queue, msg);
		handle_net_write(user);
	}
	else
	{
		if (check_send_queue(hub, user, msg) >= 0)
		{
			ioq_send_add(user->send_queue, msg);
			if (!user_flag_get(user, flag_pipeline))
				user_net_io_want_write(user);
		}
	}
	return 1;
}
コード例 #2
0
ファイル: route.c プロジェクト: junaidk/uhub
int route_flush_pipeline(struct hub_info* hub, struct hub_user* u)
{
	if (ioq_send_is_empty(u->send_queue))
		return 0;

	handle_net_write(u);
	user_flag_unset(u, flag_pipeline);
	return 1;
}
コード例 #3
0
ファイル: netevent.c プロジェクト: Nyogtha/uhub
void net_event(struct net_connection* con, int event, void *arg)
{
    struct hub_user* user = (struct hub_user*) arg;
    int flag_close = 0;

#ifdef DEBUG_SENDQ
    LOG_TRACE("net_event() : fd=%d, ev=%d, arg=%p", con->sd, (int) event, arg);
#endif

    if (event == NET_EVENT_TIMEOUT)
    {
        if (user_is_connecting(user))
        {
            hub_disconnect_user(g_hub, user, quit_timeout);
        }
        return;
    }

    if (event & NET_EVENT_READ)
    {
        flag_close = handle_net_read(user);
        if (flag_close)
        {
            hub_disconnect_user(g_hub, user, flag_close);
            return;
        }
    }

    if (event & NET_EVENT_WRITE)
    {
        flag_close = handle_net_write(user);
        if (flag_close)
        {
            hub_disconnect_user(g_hub, user, flag_close);
            return;
        }
    }
}