1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
ç,hc@sÜdZddlmZddlZddlZddlmZmZddlZddlZddl    m
Z
m Z ddl m Z mZmZddlmZmZmZddlZedƒZd    efd
„ƒYZdS( s:
    ¿ç·þÂß¼­´¦ÀíÄ£¿é
        dispatch ¹©·â°ü·Ö·¢Âß¼­µ÷ÓÃ
iÿÿÿÿ(tThreadN(tsleepttime(tmylogtCommFunc(tSingletonObjectt CommonDefineterror(t PackCommonDeftMergeServerRecvProtocoltMergeServerSendProtocolsConfig.DBConfigtLogicProcessThreadcBs˜eZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d    „Z d
„Z d „Z d „Zd „Zd„Zd„ZRS(cCsqtj|d|ƒ||_tjƒ|_t|_tjƒ|_    |j    j
|j_ d|_ t jf|_dS(Ntnamei(Rt__init__t_LogicProcessThread__serverObjtQueuet!_LogicProcessThread__requestQueuetFalset _LogicProcessThread__elegantExittMergeProxyClientMgrtgetMergeProxyClientMgrt#_LogicProcessThread__validClientMgrt    delClienttonClientDisconnectExt*_LogicProcessThread__lastHeartbeatProcTickRt
atMergeSyst_LogicProcessThread__type(tselft
threadNamet    serverObj((s+.\\ServersRoute\MergeServer_LogicProcess.pyR s            cCs|jj|ƒdS(N(Rt
put_nowait(Rtpack((s+.\\ServersRoute\MergeServer_LogicProcess.pyt requestPush&scCs4y|jjƒ}Wntjk
r/d}nX|S(N(Rt
get_nowaitRtEmptytNone(RR((s+.\\ServersRoute\MergeServer_LogicProcess.pyt
requestPop)s
 
cCs:t|_tj|ƒtjd|jƒ|jfƒdS(NsThread %s(%s) start...(RRRtstartRtinfotgetNametident(R((s+.\\ServersRoute\MergeServer_LogicProcess.pyR%0s     cCsjtjd|jƒ|jfƒt|_x|jƒrEtdƒq,Wtjd|jƒ|jfƒdS(NsStopping thread %s(%s)gš™™™™™¹?sThread %s(%s) stop ok!(RR&R'R(tTrueRtisAliveR(R((s+.\\ServersRoute\MergeServer_LogicProcess.pytstop5s
     cCsíxætrèyV|jƒ|jƒ}|dkr2Pn|j|ƒrGwntjd|jƒƒWqtk
r¬}t    j
dt    j d|t j ƒfƒ}tj    |ƒqqt    j
dt    j dt j ƒƒ}tj    |ƒqqXqWdS(NsPack %s not processed!Rs"Exception %s caught!traceback = %ss'Unknown exception caught!traceback = %s(R)tprocessHeartbeatR$R#tprocessRequestRtwarningt outputStringt    ExceptionRt    formatMsgt ERROR_NO_28t    tracebackt
format_exc(RRtetmsg((s+.\\ServersRoute\MergeServer_LogicProcess.pytrun<s"    
  ( " cCs$|j|ƒr |j|ƒtStS(N(t
canProcessR R)R(RR((s+.\\ServersRoute\MergeServer_LogicProcess.pytdispatchUs cCs¾|jƒ}tjƒ}t|ƒ|jƒkrctjdtjd|jƒƒ}t    j|ƒt
Sd}|j ||ƒ}|j |j |jƒ}|rº||ƒtjƒj|ƒtSt
S(NRsPack %s error!i(t    getBufferRttagHeadtlent    GetLengthRR1t ERROR_NO_47R/RRtReadDatat getProcFunctCmdtSubCmdRt getPackPooltfreeR)(RRtbuftHeadR6tpostprocFunc((s+.\\ServersRoute\MergeServer_LogicProcess.pyR-[s  " 
cCs6yt|d||fƒ}Wntk
r1dSX|S(Nsproc_0x%02X_0x%02X(tgetattrtAttributeErrorR#(RtcmdtsubCmdRH((s+.\\ServersRoute\MergeServer_LogicProcess.pyR@ms
 cCs)|jj|ddtjdddƒdS(Nit(RtpackSendBySessionIDRt atDisconnect(Rt    sessionID((s+.\\ServersRoute\MergeServer_LogicProcess.pytdisconnectClientBySessionIDusc
Cs9d}tƒ}|jrM||j|krM|j|krF||_qMdSn||_|jjƒ}xÍ|D]Å}|jsqln|jƒrÔ|jƒtjƒ}|j    j
|j ddt j dd|jƒƒn|jƒsl|j    j|j ƒ}|s
t|_qln|j|j ƒtjd|j ƒqlqlWdS(NiisKick client sessionID = %s(RRRt getClientListtisValidtshouldSendHeartbeattrefreshSendHeartbeatTickR
ttagPLHeartbeatRRNRPRRt    GetBuffertcheckHeartbeattFindClientBySessionIDRRQRR&(Rt procIntervaltnowTimet
clientListtclienttsendPackt    netClient((s+.\\ServersRoute\MergeServer_LogicProcess.pyR,{s.               
 !     cCs |jƒj|jkrtStS(N(t getPackHeadttypeRRR)(RR((s+.\\ServersRoute\MergeServer_LogicProcess.pyR8ŸscCsÚ|jjtdƒƒ|jjtdƒƒ}tjƒrrddl}tjd|j    |jƒ|j|fƒnt
j ƒ}|j |ƒ|j ƒ}||jjtdƒƒkr¹tStjd||jƒfƒtS(Niiÿÿÿÿs+ClientGUID = %s, TimeStamp = %s, stuff = %ssresult = %s;pack = %s(t
ClientGUIDtstriptchrt    TimeStampRtIsDebugtbinasciiRtdebugtb2a_hextmd5tnewtupdatet    hexdigestt
VerifyCodeR)t OutputStringR(Rt    loginPacktstuffRgtmd5Objtresult((s+.\\ServersRoute\MergeServer_LogicProcess.pyt LoginVerify¦s.  ,   c
Cs&|jƒ}d}t|ƒ}tjƒ}tjƒr_ddl}tjd|j    |ƒƒn|j
|||ƒtjƒr˜tjd|j ƒƒnt j ƒ}|j|ƒs{d|_d|_t|jƒ|_|jj|jƒddtjdd|jƒƒtjd|j|j|jfƒ|jj|jƒƒ}|sdtjd|jƒƒdS|j|jƒƒdSd}    |jj|jƒƒ}|r¯|jd}    nd    |_|jj|jƒddtjdd|jƒƒtjd
|jƒ|jj |jƒ|j|j|    ƒdS( Niiÿÿÿÿsbuf = %ss recvPack = %ssInvalid client!sInvalid client:%s/%s %ss Client not found!sessionID = %s!RMisClient %s login...(!R:R<R    ttagLPLoginPackRRfRgRRhRiR?RoR
ttagPLLoginResultRttResulttErrMsgt    ErrMsgLenRRNt getSessionIDRRWR&RbtGroupIDReRYR.RQtaddrRt updateClient(
RRRERGtlengthtrecvPackRgR^R]tclientIP((s+.\\ServersRoute\MergeServer_LogicProcess.pytproc_0x01_0x01µs>               1#    1cCsFtjd|jƒƒ|jj|jƒƒ}|s9dSt|_dS(NsClient logout!sessionID = %s(RR&RzRtfindClientBySessionIDRRS(RRt validClient((s+.\\ServersRoute\MergeServer_LogicProcess.pytproc_0x01_0x02ás
cCsT|jƒ}tjd|ƒ|jj|ƒ}|s9dStjdƒ|jƒdS(Ns$sessionID = %s refreshHeartbeat recvsproc_0x01_0x03, success(RzRRhRR‚trefreshHeartbeat(RRRPR]((s+.\\ServersRoute\MergeServer_LogicProcess.pytproc_0x01_0x03ès  (t__name__t
__module__R R R$R%R+R7R9R-R@RQR,R8RtRR„R†(((s+.\\ServersRoute\MergeServer_LogicProcess.pyR s                                              $            ,    (t__doc__t    threadingRRR3RRtinspectRjtCommonRRtDBCommonRRRtProtocolRR    R
Rt
__import__tDBConfigR (((s+.\\ServersRoute\MergeServer_LogicProcess.pyt<module> s