设为首页 加入收藏

TOP

【FOL】第九周(二)
2017-10-10 12:05:20 】 浏览:9741
Tags:FOL
lvServerKey,
'freenum',1); //kickOut这个session(或者设置为无效session) gvSessionManager.kickOutGameClient(lvUserID); end; tfctGameServiceClient: begin //更新游服列表 lvServerKey:= Format('server:%.3d',[StrToInt(lvUserID)]); redisClient.DEL([lvServerKey]); gvSessionManager.kickOutGameService(lvUserID); end; tfctOMClient: begin sfLogger.logMessage('[INFO]: OMClient offline'); gvSessionManager.kickOutOMClient(lvUserID); end; end; end; end; function execRegister(pvMsgData: TSimpleMsgPack; pvContext: TIOCPCoderClientContext): Integer; var lvClientType: Integer; lvSessionID: string; begin if pvContext.LockContext('register', nil) then try lvClientType:= pvMsgData.I['client_type']; case lvClientType of ord(tfctGameClient): lvSessionID:= gvSessionManager.takeAGameClientSession(pvContext, pvMsgData.S['client_id']); ord(tfctGameServiceClient): lvSessionID:= execRegisterGameServiceClient(pvMsgData, pvContext); ord(tfctOMClient): lvSessionID:= gvSessionManager.takeAOMClientSession(pvContext, pvMsgData.S['client_id']); end; pvMsgData.Clear; pvMsgData.S['token']:= '(gate)token_'+lvSessionID; result:= MSG_RESULT_Success; finally pvContext.UnLockContext('register', nil); end; end; function execRegisterGameServiceClient(pvMsgData: TSimpleMsgPack; pvContext: TIOCPCoderClientContext): string; var lvServiceID, lvServiceName, lvServerKey, lvMaxConn: string; begin lvServiceID:= pvMsgData.S['client_id']; lvServiceName:= pvMsgData.S['client_name']; lvMaxConn:= pvMsgData.S['client_maxconn']; result:= gvSessionManager.takeAGameServiceSession(pvContext,lvServiceID); //example: hmset server:001 name 五行之始 state 1 freenum 1000 lvServerKey:= Format('server:%.3d',[StrToInt(lvServiceID)]); redisClient.HMSET(lvServerKey,['name','state','freenum'],[lvServiceName,'0',lvMaxConn]); end; function execRequest(pvMsgData: TSimpleMsgPack; pvContext: TIOCPCoderClientContext): Integer; var lvMsgcode, lvCallbackID, lvServerID, lvUserID: Integer; begin lvMsgcode:= pvMsgData.I['msg_code']; lvCallbackID:= pvMsgData.I['callbackid']; sfLogger.logMessage('[INFO]: Receive a message package, msgcode=' + inttostr(lvMsgcode)); case lvMsgcode of MSG_NET_Register: result:= execRegister(pvMsgData, pvContext); MSG_NET_GetServerList: begin pvMsgData.Clear; result:= execRequestServerList(pvMsgData); end; MSG_NET_GetServerState: begin lvServerID:= pvMsgData.I['serverid']; pvMsgData.Clear; result:= execRequestServerState(lvServerID,pvMsgData); end; MSG_NET_StartGame: begin lvServerID:= pvMsgData.I['serverid']; lvUserID:= pvMsgData.I['userid']; pvMsgData.Clear; result:= execRequestStartGame(lvServerID,lvUserID,pvMsgData,pvContext); end; else begin execRequestGameService(pvMsgData); pvMsgData.Clear; exit; end; end; pvMsgData.Add('callbackid', lvCallbackID); end; function execRequestServerList(pvMsgData: TSimpleMsgPack): Integer; var i: Integer; lvServerKey: string; lvData: TArray<string>; begin for i:= 1 to 999 do begin lvServerKey:= Format('server:%.3d',[i]); lvData:= redisClient.HMGET(lvServerKey, ['n
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[示例] Firemonkey 不规则按钮实做 下一篇DevExpress VCL v16.1.3发布

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目