Contract::Contract(string spName) { memset(debug,0,16); sprintf_s(debug,16,"ContractObject"); this->spName = spName; InitializeCriticalSection(&cs); this->commodity = Commodity::findFor(spName); //TRACE_LOG("commodity findfor ok"); orderCount = 0; if(this->isDomestic()) { TRACE_LOG("enter isDomestic part"); fixName = ""; ronhonName = ""; patsapiName = ""; } else { //TRACE_LOG("begin getRonhonNameFor"); fixName = KnownContract::getFixNameFor(spName); ronhonName = KnownContract::getRonhonNameFor(spName); patsapiName = KnownContract::getPatsApiNameFor(spName); TRACE_LOG("spName = %s", spName.c_str()); TRACE_LOG("patsapiName = %s", patsapiName.c_str()); } }
void Contract::loadOrderCount() { TRACE_LOG("loadOrderCount."); ifstream file(getDateFileName()); if(file.fail()) { TRACE_LOG("Read %s fail",getDateFileName().c_str()); openFile(); return; } string contractName; while(!file.eof()) { file >> contractName; if (contractName.length() > 1) { Contract * c = Contract::get(contractName); c->increaseOrderCount(1); } } file.close(); openFile(); }
int get_ranged_svr_list_callback(usr_info_t* p, uint8_t* body, uint32_t bodylen, int ret) { //varify the respond data TRACE_LOG("get ranged callback"); CHECK_VAL_GE(bodylen, sizeof(svr_list_t)); svr_list_t* svrlist = reinterpret_cast<svr_list_t*>(body); //DEBUG_LOG("svrlist [%d %d]", svrlist->domain_id, svrlist->online_cnt); //chk if the pkg len is valid CHECK_VAL(bodylen, sizeof(svr_list_t) + svrlist->online_cnt * sizeof(svr_info_t)); return send_ranged_svrlist(p, svrlist->svrs, svrlist->online_cnt); }
el::lib_tcp_peer_info_t* el_async::connect( const std::string& ip, uint16_t port ) { int fd = el::lib_tcp_t::connect(ip, port, 1, false, g_bench_conf->get_page_size_max(), g_bench_conf->get_page_size_max()); if (-1 == fd){ ERROR_LOG("[ip:%s, port:%u]", ip.c_str(), port); }else{ TRACE_LOG("[ip:%s, port:%u, fd:%u]", ip.c_str(), port, fd); return g_net_server->get_server_epoll()->add_connect(fd, el::FD_TYPE_SVR, ip.c_str(), port); } return NULL; }
/** * @brierf Send a request package to switch server, then get the respond, but do not parse it. * @param uid. user id. * @param friendcount. haw many friends. * @param allfriendid. store the ids in an array * @return int. 0 on success. less than 0 on error. */ int get_ranged_svr_list(usr_info_t* p, int start_id, int end_id) { TRACE_LOG("enter get_ranged_svr_list"); // pack up the request data int friendcount = 0; int idx = sizeof(svr_proto_t); taomee::pack_h(login_switch_sendbuf, static_cast<uint16_t>(0), idx); taomee::pack_h(login_switch_sendbuf, start_id, idx); taomee::pack_h(login_switch_sendbuf, end_id, idx); taomee::pack_h(login_switch_sendbuf, friendcount, idx); //taomee::pack(login_switch_sendbuf, allfriendid, friendcount * sizeof(userid_t), idx); init_switch_head(p, login_switch_sendbuf, idx, SWITCH_GET_RANGED_SVR_LIST); return send_to_switch(p, login_switch_sendbuf, idx); }
void opcode_loadb(void) { uint8_t *address = z_mem + (uint16_t)(op[0] + (int16_t)op[1]); TRACE_LOG("Opcode: LOADB.\n"); read_z_result_variable(); if (address > active_z_story->static_memory_end) { TRACE_LOG("Static memory end: %x.\n", active_z_story->static_memory_end); TRACE_LOG("Trying to loadb from %x which is above static memory.\n", address); set_variable(z_res_var, 0, false); } else { TRACE_LOG("Loading from %x to var %x.\n", *address, z_res_var); set_variable(z_res_var, *address, false); } }
void* connector_callback(uint64_t conn, bool is_ok) { ERROR_LOG("收到连接器回调: %lld, 逻辑服务器为: %lld", conn, s_game_conn); if (conn == s_game_conn) { if (is_ok) { TRACE_LOG("连接器连接成功: %lld, 发起注册", conn); set_init_ok(true); regist_to_game(); } else { connect_gs(); } } return NULL; }
// not used now. void SpPriceSource::SPAccountLogout() { char szAccountLogout[256]; memset(szAccountLogout, 0, sizeof(szAccountLogout)); //get AccountLogout msg strcat_s(szAccountLogout, 256, "3122,0,"); strcat_s(szAccountLogout, 256, SPInvestorId); strcat_s(szAccountLogout, 256, "\r\n"); //e.g. 3122,0,1000 <MessageId>,<MessageType>,<AccNo><cr><lf> if(1 != m_cTcpClinet.TCPSend(szAccountLogout)) TRACE_LOG("SpPriceSource: send msg failed"); }
int32_t fs_opr_t::connect(uint32_t address, int32_t port, const char* pswd, bool reconnect) { int32_t ret = IMS_FAIL_CONNECT; char ip[sizeof "255.255.255.255"]; if (reconnect) { disconnect(); ims_tool_t::inet_ntop(address, ip, sizeof "255.255.255.255"); if (esl_connect(&_handle, ip, _port, NULL, _pswd) == ESL_SUCCESS) { TRACE_LOG("reconnect to FreeSWITCH [%s:%d] success", ip, _port); eval(RECORD_BASEDIR, _recordbase, LEN_256); ret = IMS_SUCCESS; } else { WARNING_LOG("reconnect to FreeSWITCH [%s:%d] failed(%s)", ip, _port, _handle.err); } } else { if (is_handle_valid()) { return IMS_SUCCESS; } strncpy(_pswd, pswd, LEN_16); _address = address; _port = port; ims_tool_t::inet_ntop(address, ip, sizeof "255.255.255.255"); if (esl_connect(&_handle, ip, _port, NULL, _pswd) == ESL_SUCCESS) { TRACE_LOG("connect to FreeSWITCH [%s:%d] success", ip, _port); eval(RECORD_BASEDIR, _recordbase, LEN_256); ret = IMS_SUCCESS; } else { WARNING_LOG("connect to FreeSWITCH [%s:%d] failed(%s)", ip, _port, _handle.err); } } return ret; }
void RohonDealer::placeOrder(Order *order) { int ref; //放入map中,执行相应动作,开启等待线程 TRACE_LOG("RohonDealer::placeOrder, orderid:%s.",order->getId().c_str()); if(!started) { TRACE_LOG("RohonDealer::placeOrder failed. RohonDealer not started."); order->setRejected(); return; } //放入map中 EnterCriticalSection(&cs); RohonDealerInventory* pInventory = addInventory(order); if(pInventory == NULL) { //orderID与正在处理中的重复,要拒绝这次下单请求 LeaveCriticalSection(&cs); TRACE_LOG("RohonDealer::placeOrder failed. orderID is duplicated."); //order->setRejected(); return; } //分配localRef ref = pUserSpi->getCurOrderRef(); pInventory->localRef = ref; LeaveCriticalSection(&cs); //执行下单动作 if(0 != pUserSpi->InsertOrder(ref,order)) { //下单直接失败 EnterCriticalSection(&cs); delInventory(pInventory); LeaveCriticalSection(&cs); TRACE_LOG("RohonDealer::placeOrder failed. 下单直接失败"); order->setRejected(); return; } return; }
int Gobang::handle_player_action(sprite_t* p, const uint8_t body[], int len) { TRACE_LOG("Gobang Handle Player Action: uid=%u, grpid=%lu", p->id, m_gamegrp->id); struct actpkg { uint32_t uid; Chess_Pos_Type row, col; } __attribute__((__packed__)); if ( started_check(p, len, sizeof(actpkg)) == -1 ) return -1; int i = 0; actpkg apkg; UNPKG_UINT(body, apkg.uid, i); UNPKG_UINT(body, apkg.row, i); UNPKG_UINT(body, apkg.col, i); if ( (p->id != apkg.uid) || (m_nxmover != apkg.uid) ) { ERROR_RETURN( ("UserID Mismatch, uid=%u, %u, %u", p->id, apkg.uid, m_nxmover), -1 ); } REMOVE_TIMER(p, timerid); if ( place_chess(apkg.row, apkg.col) == -1 ) return -1; broadcast_action(body, p->id); ++m_nsteps; // increase number of chesses placed std::vector<ChessCoord> adjchesses; if ( determine_winner(apkg.row, apkg.col, adjchesses) ) { notify_winner(p->id, adjchesses); m_nxmover = 0; send_game_score(p, 0, 1); DEBUG_LOG("Gobang Winner Determined\t[winner=%u]", p->id); return GER_end_of_game; } else if (draw()) { notify_winner(0); m_nxmover = 0; send_game_score(p, 2, 2); return GER_draw_game; } set_nxmover(); sprite_t* op = get_sprite_from_gamegrp(m_nxmover, m_gamegrp); time_t exptm = time(0) + 62; timerid = ADD_TIMER_EVENT(op, on_timer_expire, 0, exptm); return 0; }
void NokiaLinearVolumeItfCallback(XANokiaLinearVolumeItf /*caller*/, void* pContext, XAuint32 event, XAboolean /*eventBooleanData*/) { switch (event) { case XA_NOKIALINEARVOLUME_EVENT_VOLUME_CHANGED: if (pContext) ((XARadioSessionImpl*)pContext)->VolumeChanged(); break; default: TRACE_LOG((_L("NokiaLinearVolumeItfCallback: default"))); break; } }
void EngineObjectCallback(XAObjectItf /*caller*/, const void */*pContext*/, #ifdef PLUGIN_SYMBIAN_TRACE_ENABLED XAuint32 event, #else XAuint32 /*event*/, #endif /*PLUGIN_SYMBIAN_TRACE_ENABLED*/ XAresult /*result*/, XAuint32 /*param*/, void */*pInterface*/) { #ifdef PLUGIN_SYMBIAN_TRACE_ENABLED TRACE_LOG((_L("Engine object event: 0x%x\n"), (int)event)); #endif /*PLUGIN_SYMBIAN_TRACE_ENABLED*/ }
/*---------------------------------------------------------------------*/ int32_t filter_init(Brick *brick, Linker_Intf *li) { TRACE_BRICK_FUNC_START(); brick->private_data = calloc(1, sizeof(FilterContext)); if (brick->private_data == NULL) { TRACE_LOG("Can't create private context " "for filter\n"); TRACE_BRICK_FUNC_END(); return -1; } li->type = SHARE; TRACE_BRICK_FUNC_END(); return 1; }
/*---------------------------------------------------------------------*/ int32_t dup_init(Brick *brick, Linker_Intf *li) { TRACE_BRICK_FUNC_START(); brick->private_data = calloc(1, sizeof(linkdata)); if (brick->private_data == NULL) { TRACE_LOG("Can't create private context " "for duplicator\n"); TRACE_BRICK_FUNC_END(); return -1; } li->type = COPY; TRACE_BRICK_FUNC_END(); return 1; }
int32_t fs_opr_t::play(const char* uuid, const char* file, uint32_t count) { FUNC_BEGIN(); (void)szcmd; if (set_channel_attribute(uuid, "playback_terminators=none") && esl_execute(&_handle, "playback", file, uuid) == ESL_SUCCESS && is_result_ok(fs_resp = esl_event_get_header(_handle.last_sr_event, "Reply-Text"))) { ret = IMS_SUCCESS; TRACE_LOG("fs:play(%s,%s,%u) success.", uuid, file, count); } else { WARNING_LOG("fs:play(%s,%s,%u);ret(%s)", uuid, file, count, fs_resp); } FUNC_END(); }
/** * Initialise VirtualBox's accelerated video extensions. * * @returns TRUE on success, FALSE on failure */ static Bool vboxSetupVRAMVbva(VBOXPtr pVBox) { int rc = VINF_SUCCESS; unsigned i; pVBox->cbFBMax = pVBox->cbView; for (i = 0; i < pVBox->cScreens; ++i) { pVBox->cbFBMax -= VBVA_MIN_BUFFER_SIZE; pVBox->pScreens[i].aoffVBVABuffer = pVBox->cbFBMax; TRACE_LOG("VBVA buffer offset for screen %u: 0x%lx\n", i, (unsigned long) pVBox->cbFBMax); VBoxVBVASetupBufferContext(&pVBox->pScreens[i].aVbvaCtx, pVBox->pScreens[i].aoffVBVABuffer, VBVA_MIN_BUFFER_SIZE); } TRACE_LOG("Maximum framebuffer size: %lu (0x%lx)\n", (unsigned long) pVBox->cbFBMax, (unsigned long) pVBox->cbFBMax); rc = VBoxHGSMISendViewInfo(&pVBox->guestCtx, pVBox->cScreens, vboxFillViewInfo, (void *)pVBox); VBVXASSERT(RT_SUCCESS(rc), ("Failed to send the view information to the host, rc=%d\n", rc)); return TRUE; }
int32_t fs_opr_t::unbridge(const char* uuid) { FUNC_BEGIN(); snprintf(szcmd, LEN_512, CMD_UNBRIDGE_FMT, uuid); TRACE_LOG("unbridge(%s)", szcmd); if (esl_send_recv(&_handle, szcmd) == ESL_SUCCESS) { if (is_result_ok(fs_resp = esl_event_get_body(_handle.last_sr_event))) { ret = IMS_SUCCESS; } else { WARNING_LOG("fs:unbridge(%s);ret(%s)", uuid, fs_resp); } } FUNC_END(); }
/** * @brief Team member fatch reward callback */ int db_team_member_reward_callback(player_t *p, userid_t uid, void *body, uint32_t bodylen, uint32_t ret) { CHECK_DBERR(p, ret); uint32_t win_stage = 0, item_cnt = 0; ////1:taotai 2:contest int idx = 0; taomee::unpack_h(body, win_stage, idx); taomee::unpack_h(body, item_cnt, idx); TRACE_LOG("team member reward [%u] [%u]",uid, item_cnt); CHECK_VAL_EQ(bodylen, item_cnt * sizeof(pack_item_info_t) + 8); idx = sizeof(cli_proto_t); taomee::pack(pkgbuf, item_cnt, idx); pack_item_info_t* item_unit = reinterpret_cast<pack_item_info_t*>((uint8_t*)body + 8); for (uint32_t i = 0; i < item_cnt; i++) { taomee::pack(pkgbuf, item_unit[i].item_id, idx); taomee::pack(pkgbuf, item_unit[i].item_cnt, idx); TRACE_LOG("team member reward [%u %u]", item_unit[i].item_id, item_unit[i].item_cnt); } init_cli_proto_head(pkgbuf, p, p->waitcmd, idx); send_to_player(p, pkgbuf, idx, 1); add_swap_action_times(p, 1018 + win_stage); return 0; }
void CROHONTraderSpi::OnRspUserLogin(CRohonRspUserLoginField *pRspUserLogin, CRohonRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { if (bIsLast && !IsErrorRspInfo(pRspInfo)) { // 保存会话参数 FRONT_ID = pRspUserLogin->FrontID; SESSION_ID = pRspUserLogin->SessionID; iNextOrderRef = atoi(pRspUserLogin->MaxOrderRef); iNextOrderRef++; TRACE_LOG("[RohonDealer网关回调]用户登录成功: 交易日%s,前置编号%d,会话编号%d,报单引用%d.", m_pDealer->pUserApi->GetTradingDay(),FRONT_ID,SESSION_ID,iNextOrderRef); ///投资者结算结果确认 CRohonSettlementInfoConfirmField req; memset(&req, 0, sizeof(req)); strcpy_s(req.InvestorID, 16, INVESTOR_ID); int iResult = m_pDealer->pUserApi->ReqSettlementInfoConfirm(&req, ++iRequestID); TRACE_LOG("[RohonDealer网关]发送结算请求: %s, %s.",INVESTOR_ID,((iResult == 0) ? "发送成功" : "发送失败")); } else { TRACE_LOG("[RohonDealer网关回调]用户登录失败."); } }
/** * Callback function called by the X server to tell us about dirty * rectangles in the video buffer. * * @param pScreen pointer to the information structure for the current * screen * @param iRects Number of dirty rectangles to update * @param aRects Array of structures containing the coordinates of the * rectangles */ static void vboxHandleDirtyRect(ScrnInfoPtr pScrn, int iRects, BoxPtr aRects) { VBVACMDHDR cmdHdr; VBOXPtr pVBox; int i; unsigned j; pVBox = pScrn->driverPrivate; if (pVBox->fHaveHGSMI == FALSE || !pScrn->vtSema) return; for (j = 0; j < pVBox->cScreens; ++j) { /* Just continue quietly if VBVA is not currently active. */ struct VBVABUFFER *pVBVA = pVBox->aVbvaCtx[j].pVBVA; if ( !pVBVA || !(pVBVA->hostFlags.u32HostEvents & VBVA_F_MODE_ENABLED)) continue; for (i = 0; i < iRects; ++i) { if ( aRects[i].x1 > pVBox->aScreenLocation[j].x + pVBox->aScreenLocation[j].cx || aRects[i].y1 > pVBox->aScreenLocation[j].y + pVBox->aScreenLocation[j].cy || aRects[i].x2 < pVBox->aScreenLocation[j].x || aRects[i].y2 < pVBox->aScreenLocation[j].y) continue; cmdHdr.x = (int16_t)aRects[i].x1; cmdHdr.y = (int16_t)aRects[i].y1; cmdHdr.w = (uint16_t)(aRects[i].x2 - aRects[i].x1); cmdHdr.h = (uint16_t)(aRects[i].y2 - aRects[i].y1); #if 0 TRACE_LOG("display=%u, x=%d, y=%d, w=%d, h=%d\n", j, cmdHdr.x, cmdHdr.y, cmdHdr.w, cmdHdr.h); #endif if (VBoxVBVABufferBeginUpdate(&pVBox->aVbvaCtx[j], &pVBox->guestCtx)) { VBoxVBVAWrite(&pVBox->aVbvaCtx[j], &pVBox->guestCtx, &cmdHdr, sizeof(cmdHdr)); VBoxVBVABufferEndUpdate(&pVBox->aVbvaCtx[j]); } } } }
//send price request. void SpPriceSource::SPPrcSnapReq(char * szInstrumentID) { char szPrcSnapReq[256]; memset(szPrcSnapReq, 0, sizeof(szPrcSnapReq)); //get UserLogin msg strcat_s(szPrcSnapReq, 256, "4106,0,"); strcat_s(szPrcSnapReq, 256, szInstrumentID); strcat_s(szPrcSnapReq, 256, "\r\n"); //<MessageId>,<MessageType>,<ProductId><cr><lf> e.g.: 4106,0,HSIN8<cr><lf> //TRACE_LOG("SPPrcSnapReq: %s", szPrcSnapReq); if(1 != m_cTcpClinet.TCPSend(szPrcSnapReq)) TRACE_LOG("SpPriceSource: send msg failed"); }
/*---------------------------------------------------------------------*/ static int report(lua_State *L, int status) { TRACE_LUA_FUNC_START(); if (status && !lua_isnil(L, -1)) { const char *msg = lua_tostring(L, -1); if (msg == NULL) msg = "(error object is not a string)"; TRACE_LOG("%s", msg); lua_pop(L, 1); } TRACE_LUA_FUNC_END(); return status; }
void CROHONTraderSpi::OnRspOrderInsert(CRohonInputOrderField *pInputOrder, CRohonRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { TRACE_DEBUG("[RohonDealer网关回调]报单应答."); if(IsErrorRspInfo(pRspInfo)) { TRACE_LOG("[RohonDealer网关回调]报单应答表明报单有错."); // 根据12月29日周杰测试中发现的问题(平今仓位不足),此处增加处理逻辑 // 先判断报单是否本网关送出 int ref = 0; ref = atoi(pInputOrder->OrderRef); if(ref > 0) { // 判断为自己网关送出的报单 m_pDealer->OnReturnRspOrderInsert(pInputOrder); } } }
int32_t fs_opr_t::conference_mute(const char* name, const char* member) { FUNC_BEGIN(); snprintf(szcmd, LEN_512, "api conference %s mute %s\n\n", name, member); TRACE_LOG("conference_mute(%s)", szcmd); if (esl_send_recv(&_handle, szcmd) == ESL_SUCCESS) { if (is_result_ok(fs_resp = esl_event_get_body(_handle.last_sr_event))) { ret = IMS_SUCCESS; } else { WARNING_LOG("fs:conference_mute (%s,%s);ret(%s)", name, member, fs_resp); } } FUNC_END(); }
void CROHONTraderSpi::OnRspOrderAction(CRohonInputOrderActionField *pInputOrderAction, CRohonRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { TRACE_DEBUG("[RohonDealer网关回调]撤单应答."); if(IsErrorRspInfo(pRspInfo)) { TRACE_LOG("[RohonDealer网关回调]撤单应答表明相应报单已撤或已成交."); //根据3月2日周杰使用中发现的问题(报单无回复情况下的撤单失败应该设置为撤单成功),此处增加处理逻辑 // 先判断报单是否本网关送出 int ref = 0; ref = atoi(pInputOrderAction->OrderRef); if(ref > 0) { // 判断为自己网关送出的报单 m_pDealer->OnReturnRspOrderAction(pInputOrderAction); } } }
int send_ranged_svrlist(usr_info_t* p, svr_info_t* svrs, uint32_t online_cnt) { //make a response package to the flash client int idx = sizeof(cli_login_pk_header_t); taomee::pack(my_cli_buf, online_cnt, idx); for (uint32_t i = 0; i != online_cnt; ++i) { taomee::pack(my_cli_buf, svrs[i].id, idx); taomee::pack(my_cli_buf, svrs[i].users, idx); taomee::pack(my_cli_buf, svrs[i].ip, 16, idx); taomee::pack(my_cli_buf, svrs[i].port, idx); taomee::pack(my_cli_buf, svrs[i].friends, idx); TRACE_LOG("online=[%u %u %16s %u %u]",svrs[i].id,svrs[i].users,svrs[i].ip,svrs[i].port,svrs[i].friends); } init_proto_head(my_cli_buf, idx, PROTO_GET_RANGED_SVR_LIST, p->uid, SUCCESS); return send_to_self(p, my_cli_buf, idx); }
int send_final_game_rank_list_to_player(player_t* p, uint32_t rank) { int idx = sizeof(cli_proto_t); pack(pkgbuf, g_pvp_game_cache.rank[rank - 1].cnt, idx); for (uint32_t i = 0; i < g_pvp_game_cache.rank[rank - 1].cnt; i++) { final_game_score_t * score = &(g_pvp_game_cache.rank[rank - 1].score[i]); TRACE_LOG("PLAYER [%u %u %u] [%u]", score->userid, score->roletm, score->lv, score->score); pack(pkgbuf, score->userid, idx); pack(pkgbuf, score->nick, sizeof(score->nick), idx); pack(pkgbuf, score->lv, idx); pack(pkgbuf, score->score, idx); } init_cli_proto_head(pkgbuf, p, p->waitcmd, idx); return send_to_player(p, pkgbuf, idx, 1); }
gpgme_decrypt_result_t gpgme_op_decrypt_result (gpgme_ctx_t ctx) { void *hook; op_data_t opd; gpgme_error_t err; TRACE_BEG (DEBUG_CTX, "gpgme_op_decrypt_result", ctx); err = _gpgme_op_data_lookup (ctx, OPDATA_DECRYPT, &hook, -1, NULL); opd = hook; if (err || !opd) { TRACE_SUC0 ("result=(null)"); return NULL; } if (_gpgme_debug_trace ()) { gpgme_recipient_t rcp; if (opd->result.unsupported_algorithm) { TRACE_LOG1 ("result: unsupported_algorithm: %s", opd->result.unsupported_algorithm); } if (opd->result.wrong_key_usage) { TRACE_LOG ("result: wrong key usage"); } rcp = opd->result.recipients; while (rcp) { TRACE_LOG3 ("result: recipient: keyid=%s, pubkey_algo=%i, " "status=%s", rcp->keyid, rcp->pubkey_algo, gpg_strerror (rcp->status)); rcp = rcp->next; } if (opd->result.file_name) { TRACE_LOG1 ("result: original file name: %s", opd->result.file_name); } } TRACE_SUC1 ("result=%p", &opd->result); return &opd->result; }
////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// //A work thread to handle comming msgs from network void receive_tcp( void* pParams ) { SpPriceSource *sPPriceSource = (SpPriceSource *) pParams; if (sPPriceSource == NULL) { TRACE_LOG(" err: sPPriceSource is NULL"); return; } int len = 0; int code = 0; char szmsg[1024]; while(1) { memset(szmsg, 0, sizeof(szmsg)); len = sPPriceSource->m_cTcpClinet.TCPRecive(szmsg); if (len > 0) { code = sPPriceSource->DecodeMsgHead(szmsg); switch(code) { case MSGID_USER_LOGIN: case MSGID_USER_LOGOUT: sPPriceSource->DealUserLoadReply(szmsg); break; case MSGID_ACCOUNT_LOGIN: case MSGID_ACCOUNT_LOGOUT: sPPriceSource->DealAccountLoadReply(szmsg); break; case MSGID_PRC_SNAP_REQ: //TRACE_LOG("MSGID_PRC_SNAP_REQ %d, %s",MSGID_PRC_SNAP_REQ, szmsg); break; case MSGID_PRC_UPD_REQ: break; case MSGID_PRC_UPD_REL: break; case MSGID_UPDATED_PRICE: sPPriceSource->DealSnapPrice(szmsg); g_sendPriceReqlag = 0; break; default: break; } }else Sleep(500); } _endthread(); }