Example #1
0
static void dispatch_msg(msgdisp_t disp,msg_t msg)
{
    //printf("dispatch_msg\n");
    if(msg->type == MSG_RPACKET)
    {
        //printf("RPACKET\n");
        rpacket_t rpk = (rpacket_t)msg;
        if(!disp->process_packet || disp->process_packet(disp,make_by_ident(MSG_IDENT(rpk)),rpk))
            rpk_destroy(&rpk);
    }else if(msg->type == MSG_DB_RESULT){
        db_result_t result = (db_result_t)msg;
        if(result->callback)
            result->callback(result);
        free_dbresult(result);
    }else if(msg->type == MSG_DO_FUNCTION){
        msg_do_function_t _msg = (msg_do_function_t)msg;
        if(_msg->fn_function)
            _msg->fn_function(MSG_USRPTR(_msg));
        free(msg);
    }
    else{
        struct msg_connection *tmsg = (struct msg_connection*)msg;
        //printf("dispatch_msg %d\n",msg->type);
        sock_ident sock = CAST_2_SOCK(tmsg->base._ident);
        if(msg->type == MSG_ONCONNECT){
            //printf("MSG_ONCONNECT\n");
            if(disp->on_connect)
                disp->on_connect(disp,sock,tmsg->ip,tmsg->port);
            else
                asynsock_close(sock);
        }
        else if(msg->type == MSG_ONCONNECTED){
             //printf("MSG_ONCONNECTED\n");
            if(disp->on_connected)
                disp->on_connected(disp,sock,tmsg->ip,tmsg->port);
            else
                asynsock_close(sock);
        }
        else if(msg->type == MSG_DISCONNECTED && disp->on_disconnect){
                disp->on_disconnect(disp,sock,tmsg->ip,tmsg->port,tmsg->reason);
        }
        else if(msg->type == MSG_CONNECT_FAIL && disp->connect_failed)
            disp->connect_failed(disp,tmsg->ip,tmsg->port,tmsg->reason);
        free(msg);
    }
}
Example #2
0
static void agent_connected(msgdisp_t disp,sock_ident sock,const char *ip,int32_t port)
{
	agentservice_t service = get_thd_agentservice();
	agentplayer_t ply = new_agentplayer(service);
	if(!ply)
	{
		//发送一个消息,通知系统繁忙然后关闭连接
		wpacket_t wpk = wpk_create(64,0);
		wpk_write_uint16(wpk,CMD_GAME_BUSY);
		asyn_send(sock,wpk);
		asynsock_close(sock);
	}else
	{
		asynsock_set_ud(sock,(void*)ply->session.data);
	}
}