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
Eîhc@sìdZddlmZddlZddlZddlmZmZddlZddlZddl    m
Z
ddl m Z m Z ddlmZmZmZddlmZmZmZddlZed    ƒZd
efd „ƒYZdS( s:
    ¿ç·þÂß¼­´¦ÀíÄ£¿é
        dispatch ¹©·â°ü·Ö·¢Âß¼­µ÷ÓÃ
iÿÿÿÿ(tThreadN(tsleepttime(t MongoDBServer(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.\\MergeServer_LogicProcess.pyRs            cCs|jj|ƒdS(N(Rt
put_nowait(Rtpack((s.\\MergeServer_LogicProcess.pyt requestPush(scCs>y|jjƒ}Wn$tjk
r9d}tdƒnX|S(Ngü©ñÒMb`?(Rt
get_nowaitRtEmptytNoneR(RR ((s.\\MergeServer_LogicProcess.pyt
requestPop+s cCs:t|_tj|ƒtjd|jƒ|jfƒdS(NsThread %s(%s) start...(RRRtstartRtinfotgetNametident(R((s.\\MergeServer_LogicProcess.pyR&3s     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.\\MergeServer_LogicProcess.pytstop8s
     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(RR tetmsg((s.\\MergeServer_LogicProcess.pytrun?s"    
  ( " cCs$|j|ƒr |j|ƒtStS(N(t
canProcessR!R*R(RR ((s.\\MergeServer_LogicProcess.pytdispatchXs 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    getBufferR    ttagHeadtlent    GetLengthRR2t ERROR_NO_47R0RRtReadDatat getProcFunctCmdtSubCmdRt getPackPooltfreeR*(RR tbuftHeadR7tpostprocFunc((s.\\MergeServer_LogicProcess.pyR.^s  " 
cCs6yt|d||fƒ}Wntk
r1dSX|S(Nsproc_0x%02X_0x%02X(tgetattrtAttributeErrorR$(RtcmdtsubCmdRI((s.\\MergeServer_LogicProcess.pyRAps
 cCs|jƒdS(N(t
disconnect(Rt    netClient((s.\\MergeServer_LogicProcess.pytdisconnectClientBySessionIDxscCsãd}tƒ}|jrM||j|krM|j|krF||_qMdSn||_|jjƒ}xw|D]o}|jsqln|jƒsl|jj|jƒ}|s·t    |_qln|j
|ƒt j d|jƒqlqlWdS(NisKick client sessionID = %s( RRRt getClientListtisValidtcheckHeartbeatRtFindClientBySessionIDt    sessionIDRRPRR'(Rt procIntervaltnowTimet
clientListtclientRO((s.\\MergeServer_LogicProcess.pyR-~s$                    cCs |jƒj|jkrtStS(N(t getPackHeadttypeRRR*(RR ((s.\\MergeServer_LogicProcess.pyR9œscCsÅ|jjtdƒƒ|jjtdƒƒ}tjƒr]tjd|j|j|fƒntj    ƒ}|j
|ƒ|j ƒ}||j jtdƒƒkr¤t Stjd||jƒfƒtS(Nis+ClientGUID = %s, TimeStamp = %s, stuff = %ssresult = %s;pack = %s(t
ClientGUIDtstriptchrt    TimeStampRtIsDebugRtdebugtmd5tnewtupdatet    hexdigestt
VerifyCodeR*t OutputStringR(Rt    loginPacktstufftmd5Objtresult((s.\\MergeServer_LogicProcess.pyt LoginVerify£s. #   c Csh|jƒ}d}t|ƒ}tjƒ}tjƒr_ddl}tjd|j    |ƒƒn|j
|||ƒtjƒr˜tjd|j ƒƒnt j ƒ}|j|ƒsud|_d|_t|jƒ|_|jj|jƒddtjdd|jƒƒtjd|j|j|jfƒ|jj|jƒƒ}|sdtjd|jƒƒdS|j|ƒdSd}    |jj|jƒƒ}|r©|jd}    nd    |_|jj|jƒddtjdd|jƒƒtjd
|jƒ|jj |jƒ|j|j|    ƒs8|r4|j|ƒndS|jj!|jƒƒ}
|
sZdS|
j"ƒdS( Niiÿÿÿÿsbuf = %ss recvPack = %ssInvalid client!sInvalid client:%s/%s %ss Client not found!sessionID = %s!tisClient %s login...(#R;R=R
ttagLPLoginPackRR`tbinasciiRRatb2a_hexR@RgR ttagPLLoginResultRltResulttErrMsgt    ErrMsgLenRtpackSendBySessionIDt getSessionIDRt    GetBufferR'R\t    GroupNameR_RTR/RPtaddrRt updateClienttfindClientBySessionIDtrefreshHeartbeat( RR RFRHtlengthtrecvPackRotsendPackRYtclientIPt validClient((s.\\MergeServer_LogicProcess.pytproc_0x01_0x01²sL               1#     1'cCsFtjd|jƒƒ|jj|jƒƒ}|s9dSt|_dS(NsClient logout!sessionID = %s(RR'RvRR{RRR(RR R((s.\\MergeServer_LogicProcess.pytproc_0x01_0x02æs
cCsŽ|jƒ}tjd|ƒ|jj|ƒ}|s9dStjdƒ|jƒtjƒ}|jj    |j
ddt j dd|j ƒƒdS(Ns$sessionID = %s refreshHeartbeat recvsproc_0x01_0x03, successi(RvRRaRR{R|R ttagPLHeartbeatRRuRURRRw(RR RURYR((s.\\MergeServer_LogicProcess.pytproc_0x01_0x03îs  
 !(t__name__t
__module__RR!R%R&R,R8R:R.RARPR-R9RlR‚RƒR…(((s.\\MergeServer_LogicProcess.pyR s                                                          4    (t__doc__t    threadingRRR4RRtinspectRbtNetRtCommonRRtDBCommonRRRtProtocolR    R
R Rt
__import__tDBConfigR (((s.\\MergeServer_LogicProcess.pyt<module> s