void Worker::onRouterMessage(Connection *router) { Buffer *pBuffer = router->getBuffer(); while(pBuffer->size()) { if(pBuffer->size() < ROUTER_HEAD_SIZE){ return ; } RouterMsg msg = Router::unpackMsg(pBuffer->data()); if(pBuffer->size() < ROUTER_HEAD_SIZE + msg.slen + msg.len){ return ; } RouterMsg *pMsg = (RouterMsg*)pBuffer->data(); pMsg->type = msg.type; pMsg->slen = msg.slen; pMsg->len = msg.len; LOG("on router data,type=%d, slen=%d, len=%d", pMsg->type, pMsg->slen, pMsg->len); switch(pMsg->type){ case ROUTER_MSG_KICK: doKick(pMsg); break; case ROUTER_MSG_SEND_MSG: doSendMsg(pMsg); break; case ROUTER_MSG_SEND_ALL: doSendAllMsg(pMsg); break; case ROUTER_MSG_CH_ADD: doChannelAdd(pMsg); break; case ROUTER_MSG_CH_DEL: doChannelDel(pMsg); break; case ROUTER_MSG_CH_PUB: doChannelPub(pMsg); break; default: LOG("invalid type"); break; } pBuffer->seek(ROUTER_HEAD_SIZE + pMsg->slen + pMsg->len); } }
void Router::onMessage(Connection *conn) { Buffer *pBuffer = conn->getBuffer(); while(true) { if(pBuffer->size() < ROUTER_HEAD_SIZE){ return ; } RouterMsg msg = unpackMsg(pBuffer->data()); if(pBuffer->size() < ROUTER_HEAD_SIZE + msg.slen + msg.len){ return ; } RouterMsg *pMsg = (RouterMsg*)pBuffer->data(); pMsg->type = msg.type; pMsg->slen = msg.slen; pMsg->len = msg.len; LOG("on data, type=%d, slen=%d, len=%d", pMsg->type, pMsg->slen, pMsg->len); switch(pMsg->type){ case ROUTER_MSG_AUTH: doAuth(conn, pMsg); break; case ROUTER_MSG_CONN: doConn(conn, pMsg); break; case ROUTER_MSG_CLOSE: doClose(conn, pMsg); break; case ROUTER_MSG_KICK: doKick(conn, pMsg); break; case ROUTER_MSG_SEND_MSG: doSendMsg(conn, pMsg); break; case ROUTER_MSG_SEND_ALL: doSendAllMsg(conn, pMsg); break; case ROUTER_MSG_CH_ADD: doChannelAdd(conn, pMsg); break; case ROUTER_MSG_CH_DEL: doChannelDel(conn, pMsg); break; case ROUTER_MSG_CH_PUB: doChannelPub(conn, pMsg); break; case ROUTER_MSG_CH_SUB: doChannelSub(conn, pMsg); break; case ROUTER_MSG_CH_UNSUB: doChannelUnSub(conn, pMsg); break; case ROUTER_MSG_INFO: doInfo(conn, pMsg); break; default: LOG("[router]error type"); break; } pBuffer->seek(ROUTER_HEAD_SIZE + pMsg->slen + pMsg->len); } }