Esempio n. 1
0
void CCPomelo::dispatchRequest(){
    lockReponsQeueue();
    CCPomeloReponse_ *response = popReponse();
    if (response) {
        CCPomeloContent_ * content = NULL;
        if (request_content.find(response->request)!=request_content.end()) {
            content = request_content[response->request];
            request_content.erase(response->request);
        }
        if (content) {
            
            CCObject *pTarget = content->pTarget;
            SEL_CallFuncND pSelector = content->pSelector;
            if (pTarget && pSelector)
            {
                CCPomeloReponse resp;
                resp.status = response->status;
                resp.docs = response->docs;
                (pTarget->*pSelector)((CCNode *)this,&resp);
            }
        }else{
            CCLOG("dispatch response:\r\nlost content");
        }
        json_decref(response->docs);
        json_decref(response->request->msg);
        pc_request_destroy(response->request);
        delete response;
    }
    unlockReponsQeueue();
}
Esempio n. 2
0
void CCPomelo::dispatchRequest(){
    lockReponsQeueue();
    CCPomeloReponse_ *response = popReponse();
    if (response) {
        CCPomeloContent_ * content = NULL;
        if (request_content.find(response->request)!=request_content.end()) {
            content = request_content[response->request];
            request_content.erase(response->request);
        }
        if (content) {
            if (log_level>0)
            CCLog("dispatch response:\r\nevent:%s\r\nmsg:%s\r\nstatus:%d\r\ndocs:%s\r\n",response->request->route,json_dumps(response->request->msg,0),response->status,json_dumps(response->docs,0));
            
            CCObject *pTarget = content->pTarget;
            SEL_CallFuncND pSelector = content->pSelector;
            int luaHandler = content->pLuaHandler;
            if (pTarget && pSelector)
            {
                CCPomeloReponse resp;
                resp.status = response->status;
                resp.docs = response->docs;
                resp.luaHandler = luaHandler;
                (pTarget->*pSelector)((CCNode *)this, &resp);
            }
        }else{
            CCLog("dispatch response:\r\nlost content");
        }
        json_decref(response->docs);
        json_decref(response->request->msg);
        pc_request_destroy(response->request);
        delete response;
    }
    unlockReponsQeueue();
}
Esempio n. 3
0
void Login::requstConnectorCallback(pc_request_t *req, int status, json_t *resp)
{
    error = 0;
    if(status == -1) {
        CCLOG("Fail to send request to server.\n");
    } else if(status == 0) {
        char *json_str = json_dumps(resp, 0);
        CCLOG("server response: %s \n", json_str);
        json_t* users = json_object_get(resp,"users");
        if(json_object_get(resp, "error") != NULL) {
            error = 1;
            CCLOG("connect error %s", json_str);
            free(json_str);
            return;
        }
        pomelo_client = req->client;
        for (unsigned int i=0; i<json_array_size(users); i++) {
            json_t* val = json_array_get(users,i);
            userQueue->addObject(CCString::create(json_string_value(val)));
        }
    }

    // release relative resource with pc_request_t
    json_t *msg = req->msg;
    // pc_client_t *client = req->client;
    json_decref(msg);
    pc_request_destroy(req);
}
Esempio n. 4
0
void on_request_gate_cb(pc_request_t *req, int status, json_t *resp) {
    if (status == -1) {
        printf("Fail to send request to server.\n");
    } else if (status == 0) {
        connectorHost = json_string_value(json_object_get(resp, "host"));
        connectorPort = json_number_value(json_object_get(resp, "port"));
        pc_client_t *client = pc_client_new();

        struct sockaddr_in address;

        memset(&address, 0, sizeof(struct sockaddr_in));
        address.sin_family = AF_INET;
        address.sin_port = htons(connectorPort);
        address.sin_addr.s_addr = inet_addr(connectorHost);

        // add pomelo events listener
        pc_add_listener(client, "disconnect", on_disconnect);
        pc_add_listener(client, "onChat", on_chat);
        pc_add_listener(client, "onAdd", on_add);
        pc_add_listener(client, "onLeave", on_leave);

        printf("try to connect to connector server %s %d\n", connectorHost, connectorPort);
        // try to connect to server.
        if (pc_client_connect(client, &address)) {
            printf("fail to connect connector server.\n");
            pc_client_destroy(client);
            return ;
        }

        const char *route = "connector.entryHandler.enter";
        json_t *msg = json_object();
        json_t *str = json_string(user);
        json_t *channel_str = json_string(channel);
        json_object_set_new(msg, "username", str);
        json_object_set_new(msg, "rid", channel_str);

        pc_request_t *request = pc_request_new();
        printf("%s %s\n", user, channel);
        pc_request(client, request, route, msg, on_request_connector_cb);
    }

    // release relative resource with pc_request_t
    json_t *pc_msg = req->msg;
    pc_client_t *pc_client = req->client;
    json_decref(pc_msg);
    pc_request_destroy(req);

    pc_client_stop(pc_client);
}
Esempio n. 5
0
// request callback
void on_request_cb(pc_request_t *req, int status, json_t *resp) {
  if(status == -1) {
    printf("Fail to send request to server.\n");
  } else if(status == 0) {
    printf("server response: %s\n", json_dumps(resp, 0));
  }

  // release relative resource with pc_request_t
  json_t *msg = req->msg;
  json_decref(msg);
  pc_request_destroy(req);

  count--;
  if(count == 0)
    pc_client_stop(req->client);
}
void Net::pomeloRequestCallBack(pc_request_t *req, int status, json_t *resp)
{
	auto event = req->route;
	if(status == -1)
	{
		Net::getInstance()->pushMsg(std::string(event), std::string("{\"error\":true}"));
		Net::getInstance()->pushMsg(std::string(PC_EVENT_REQUESTFAIL), std::string(""));
	}
	else if(status == 0) 
	{
		
		auto msg = json_dumps(resp, 0);
		Net::getInstance()->pushMsg(std::string(event), std::string(msg));
		free(msg);
	}
	json_t *msg = req->msg;
	json_decref(msg);
	pc_request_destroy(req);
}
Esempio n. 7
0
void on_request_cb(pc_request_t* req, int status, json_t* resp)
{
	if (status == -1)
	{
		printf("Fail to request to server.\n");
	}
	else if (status == 0)
	{
		char * json_str = json_dumps(resp, 0);
		if (json_str != NULL)
		{
			printf("server response:%s\n", json_str);
			free(json_str);
		}
	}
	json_t *msg = req->msg;
	pc_client_t *client = req->client;
	json_decref(msg);
	pc_request_destroy(req);
	pc_client_stop(client);
}
Esempio n. 8
0
void NetImpl::on_request_cb( pc_request_t* __req, int __status, json_t* __resp )
{
    if(__status == -1) {
        printf("Fail to send request to server.\n");
    } else if(__status == 0) {
        char* __json_str = json_dumps(__resp, 0);
        if(__json_str != NULL) {
            printf("server response: %s\n", __json_str);
            free(__json_str);
        }
    }

    // release relative resource with pc_request_t
    json_t*__msg = __req->msg;
    pc_client_t* __client = __req->client;
    json_decref(__msg);
    pc_request_destroy(__req);

    // stop client
    pc_client_stop(__client);

}
Esempio n. 9
0
void on_request_connector_cb(pc_request_t *req, int status, json_t *resp) {
    printf("on_request_connector_cb\n");
    if (status == -1) {
        printf("Fail to send request to server.\n");
    } else if (status == 0) {
        char *json_str = json_dumps(resp, 0);
        printf("server response: %s \n", json_str);
        json_t *users = json_object_get(resp, "users");
        if (json_object_get(resp, "error") != NULL) {
            printf("connect error %s", json_str);
            free(json_str);
            return;
        }
        pomelo_client = req->client;
        printf("login chat ok\n");
    }

    // release relative resource with pc_request_t
    json_t *msg = req->msg;
    pc_client_t *client = req->client;
    json_decref(msg);
    pc_request_destroy(req);
}
Esempio n. 10
0
void CCPomelo::dispatchRequest()
{
    lockReponsQeueue();
    CCPomeloReponse_ *response = popReponse();
    if (response)
    {
        std::map<pc_request_t*, std::function<void(Node*, void*)> >::iterator it = request_content.find(response->request);
        if (it != request_content.end())
        {
            CCPomeloReponse resp;
            resp.status = response->status;
            resp.docs = response->docs;
            (*it).second((Node*)this, &resp);
            request_content.erase(it);

        }

        json_decref(response->docs);
        json_decref(response->request->msg);
        pc_request_destroy(response->request);
        delete response;
    }
    unlockReponsQeueue();
}
Esempio n. 11
0
void Login::requstGateCallback(pc_request_t *req, int status, json_t *resp)
{
    if(status == -1) {
        CCLOG("Fail to send request to server.\n");
    } else if(status == 0) {
        connectorHost = json_string_value(json_object_get(resp, "host"));
        connectorPort = json_number_value(json_object_get(resp, "port"));
        CCLOG("%s %d", connectorHost,connectorPort);
        pc_client_t *client = pc_client_new();

        struct sockaddr_in address;

        memset(&address, 0, sizeof(struct sockaddr_in));
        address.sin_family = AF_INET;
        address.sin_port = htons(connectorPort);
        address.sin_addr.s_addr = inet_addr(connectorHost);

        // add pomelo events listener
        void (*on_disconnect)(pc_client_t *client, const char *event, void *data) = &Login::onDisconnectCallback;
        void (*on_chat)(pc_client_t *client, const char *event, void *data) = &Login::onChatCallback;
        void (*on_add)(pc_client_t *client, const char *event, void *data) = &Login::onAddCallback;
        void (*on_leave)(pc_client_t *client, const char *event, void *data) = &Login::onLeaveCallback;

        pc_add_listener(client, "disconnect", on_disconnect);
        pc_add_listener(client, "onChat", on_chat);
        pc_add_listener(client, "onAdd", on_add);
        pc_add_listener(client, "onLeave", on_leave);

        // try to connect to server.
        if(pc_client_connect(client, &address)) {
            CCLOG("fail to connect server.\n");
            pc_client_destroy(client);
            return ;
        }

        const char *route = "connector.entryHandler.enter";
        json_t *msg = json_object();
        json_t *str = json_string(username.c_str());
        json_t *channel_str = json_string(channel.c_str());
        json_object_set(msg, "username", str);
        json_object_set(msg, "rid", channel_str);
        // decref for json object
        json_decref(str);
        json_decref(channel_str);

        pc_request_t *request = pc_request_new();
        void (*connect_cb)(pc_request_t *req, int status, json_t *resp )= &Login::requstConnectorCallback;
        pc_request(client, request, route, msg, connect_cb);

        /*
        char *json_str = json_dumps(resp, 0);
        if(json_str != NULL) {
            CCLOG("server response: %s %d\n", connectorHost, connectorPort);
            free(json_str);
        }
        */
    }

    // release relative resource with pc_request_t
    json_t *pc_msg = req->msg;
    pc_client_t *pc_client = req->client;
    json_decref(pc_msg);
    pc_request_destroy(req);

    pc_client_stop(pc_client);
}