admin
2023-08-04 ca310f014336d93eba73ed5010c1c5645424a1e0
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
B
áý£d8=ã@sâdZddlZddlZddlZddlZddlZddlZddlZddlZddl    m
Z
dZ dZ dZ dZdZd    Zd
Zd Zd Zd Zdd„aGdd„deƒZGdd„deƒZGdd„dƒZGdd„dƒZedkrÞedddƒZe ¡eƒdS)u
命令管理器
éN)ÚSendResponseSkManagerÚheartÚcmdZtradeZ delegate_listZ    deal_listZ position_listZmoneyZdealÚl2_cmdéc    Cs°| d¡}d|kr| d¡g}xX|D]P}t||ƒtkr^| |›dtj||dd›¡q&| |›d||›¡q&W| ¡| d¡t     d 
|¡¡}||kr¨dSdSdS)    NZsignú=)ú,ú:)Ú
separatorsz %Yeshi2014@#.ú&TF) ÚgetÚpopÚtypeÚdictÚappendÚjsonÚdumpsÚsortÚcryptZ md5_encryptÚjoin)ÚdataZold_signZstr_listÚkZnew_sign©rú/D:\workspace\GP\trade_huaxin\command_manager.pyÚ is_sign_right#s
 
 
$
rc@s4eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd S) ÚTradeActionCallbackcCsdS)Nr)ÚselfÚ    client_idÚ
request_idZtype_rrrrÚOnTrade8szTradeActionCallback.OnTradecCsdS)Nr)rrrrrrÚOnDelegateList<sz"TradeActionCallback.OnDelegateListcCsdS)Nr)rrrrrrÚ
OnDealList@szTradeActionCallback.OnDealListcCsdS)Nr)rrrrrrÚOnPositionListDsz"TradeActionCallback.OnPositionListcCsdS)Nr)rrrrrrÚOnMoneyHszTradeActionCallback.OnMoneyN)Ú__name__Ú
__module__Ú __qualname__rr r!r"r#rrrrr6s
rc@seZdZdd„ZdS)ÚL2ActionCallbackcCsdS)Nr)rrrÚ
codes_datarrrÚOnSetL2PositionNsz L2ActionCallback.OnSetL2PositionN)r$r%r&r)rrrrr'Lsr'cs’eZdZiZdZ‡fdd„Zedd„ƒZeddd„ƒZedd    d
„ƒZ    ed d „ƒZ
ed d„ƒZ edd„ƒZ edd„ƒZ edd„ƒZddd„Z‡ZS)ÚTradeCommandManagerNcs"|jstƒj|f|ž|Ž|_|jS)N)Ú    _instanceÚsuperÚ__new__)ÚclsÚargsÚkwargs)Ú    __class__rrr-WszTradeCommandManager.__new__c
Csdt tjtj¡}| tjtjd¡| |j¡| t     
t   dd|i|dœ¡  d¡¡¡| d¡|S)NTÚregisterÚ client_type)rrÚridzutf-8i)ÚsocketÚAF_INETÚ SOCK_STREAMÚ
setsockoptÚ
SOL_SOCKETÚ SO_KEEPALIVEÚconnectÚip_portÚsendrÚformat_responserrÚencodeÚrecv)r.r3r4ÚclientrrrÚ__create_client\s  
z#TradeCommandManager.__create_clientcCsn|›dtt ¡dƒ›dt dd¡›}|dk    r>|d|›7}| ||¡}| |||¡| |||¡||fS)NÚ_ièr)ÚroundÚtimeÚrandomÚrandintÚ#_TradeCommandManager__create_clientÚ'_TradeCommandManager__heartbeats_threadÚ+_TradeCommandManager__listen_command_thread)r.rÚindexÚkeyÚskrrrZ__create_and_run_clientgs( z+TradeCommandManager.__create_and_run_clienté
cCs€i|_||_||_||f|_x.t|ƒD]"}| t|¡}|d|j|d<q&W| t¡|_| t    ¡|_
| t ¡|_ | t ¡|_dS)Nér)Útrade_client_dictÚtrade_client_countÚaction_callbackr<ÚrangeÚ+_TradeCommandManager__create_and_run_clientÚCLIENT_TYPE_TRADEÚCLIENT_TYPE_DELEGATE_LISTÚdelegate_clientÚCLIENT_TYPE_DEAL_LISTÚdeal_list_clientÚCLIENT_TYPE_POSITION_LISTÚposition_list_clientÚCLIENT_TYPE_MONEYÚ money_client)r.ÚaddrÚportZtrade_action_callbackrQÚiÚresultrrrÚinitrs
    zTradeCommandManager.initc CsBx:y~t |¡d}|rzz<ytd||ƒt |¡}|dtkrd| t d|dœ¡ d¡¡w|d}|     d¡}t
|ƒs–t   |||d    d
d œ¡w|t krº|d }|j ||||¡nl|tkrÒ|j ||¡nT|tkrê|j ||¡n<|tkr|d }    |j |||    ¡n|tkr&|j ||¡Wn.tk
rV}
zt |
¡Wdd}
~
XYnXWd| t ddi¡ d¡¡Xntdƒ‚Wqtk
r8}
z”t |
¡|t krÆ||jkr |j |¡nF|tkrØd|_n4|tkrêd|_n"|tkrüd|_n|tkr d|_ y | !¡Wn YnXPWdd}
~
XYqXqWdS)Nru 接收数据rr)rrzutf-8rréÿÿÿÿu 签名错误)ÚcodeÚmsgZ
trade_typeÚ
can_cancelÚ cmd_recieveu接收的内容为空)"Ú socket_utilÚ    recv_dataÚprintrÚloadsÚMSG_TYPE_HEARTr=rr?r rrÚsend_error_responserUrRrr\r#rXr!rVr rZr"Ú    ExceptionÚloggingÚ    exceptionrPr r]rYrWr[Úclose) r.Ú_typerrMraÚ result_jsonrrZctyperfÚerrrÚ__listen_command†sf 
 
 
 
 
 
 
 
 
 
 
 
 z$TradeCommandManager.__listen_commandc
Csôxîy0| t t d|dœ¡ d¡¡¡td|ƒWn®tk
rà}ztdƒt     |¡|t
krv||j kr´|j   |¡n>|t kr†d|_n.|tkr–d|_n|tkr¦d|_n|tkr´d|_y | ¡Wn YnXPWdd}~XYnXt t¡qWdS)Nr)rrzutf-8u心跳信息发送成功u心跳信息发送失败)r=rr>rrr?rjrnrorprUrPr r\r]rXrYrVrWrZr[rqrEÚsleepÚHEART_SPACE_TIME)r.rrrrMrtrrrÚ __heart_beatsÆs2
 
 z!TradeCommandManager.__heart_beatscs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú$_TradeCommandManager__listen_commandr)rrr.r4rMrrÚ<lambda>åóz=TradeCommandManager.__listen_command_thread.<locals>.<lambda>)ÚtargetT)Ú    threadingÚThreadÚ    setDaemonÚstart)r.rrr4rMÚt1r)rrr.r4rMrÚ__listen_command_threadãs
z+TradeCommandManager.__listen_command_threadcs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú!_TradeCommandManager__heart_beatsr)rrr.r4rMrrrzër{z9TradeCommandManager.__heartbeats_thread.<locals>.<lambda>)r|T)r}r~rr€)r.rrr4rMrr)rrr.r4rMrÚ__heartbeats_threadés
z'TradeCommandManager.__heartbeats_threadcCsúxôyØt|jƒ|jkrXtdtƒx8t|jt|jƒƒD] }| t¡}|d|j|d<q4W|jdkrxtdtƒ| t¡|_|j    dkr˜tdt
ƒ| t
¡|_    |j dkr¸tdt ƒ| t ¡|_ |j dkrØtdtƒ| t¡|_ Wn YnXt d¡qWdS)NÚ__maintain_clientrOr)ÚlenrPrQrjrUrSrTrWrVrYrXr[rZr]r\rErv)r.r`rarrrr…ïs,
 
 
 
 
 
 
 
 
 
z%TradeCommandManager.__maintain_clientTcs8|rˆ ¡n&tj‡fdd„d}| d¡| ¡dS)Ncsˆ ¡S)N)Ú%_TradeCommandManager__maintain_clientr)rrrrzr{z)TradeCommandManager.run.<locals>.<lambda>)r|T)r‡r}r~rr€)rÚblockingrr)rrÚruns
 
 
zTradeCommandManager.run)N)rN)T)r$r%r&rPr+r-Ú classmethodrHrTrbryrƒrJrIr‡r‰Ú __classcell__rr)r1rr*Ss  
  @    !r*c@sjeZdZedd„ƒZedd„ƒZedd„ƒZedd„ƒZed    d
„ƒZed d „ƒZ    ed d„ƒZ
ddd„Z dS)ÚL2CommandManagerc
CsJt ¡}| |j¡| t t dd|i|dœ¡ d¡¡¡|     d¡|S)Nr2r3)rrr4zutf-8i()
r5r;r<r=rr>rrr?r@)r.r3r4rArrrrBs   
z L2CommandManager.__create_clientcCsj||_||f|_t›dtt ¡dƒ›dt dd¡›}| t|¡|_|     t||j¡| 
t||j¡dS)NrCièr) rRr<ÚCLIENT_TYPE_CMD_L2rDrErFrGÚ _L2CommandManager__create_clientÚ l2_cmd_clientÚ$_L2CommandManager__heartbeats_threadÚ(_L2CommandManager__listen_command_thread)r.r^r_Zl2_action_callbackrLrrrrb's 
(zL2CommandManager.initc CsFx>yèt |¡d}tdƒ|râz¢yt |¡}|dtkrX| t d|dœ¡ d¡¡w|d}|d}|d}t    |ƒst
  |||d    d
d œ¡w|d}    |t kr°|j  |||    ¡Wn YnXWd| t dd i¡ d¡¡Xntd ƒ‚Wqtk
r<}
z0t |
¡d|_y | ¡Wn YnXPWdd}
~
XYqXqWdS)Nru接收L2_CMD数据rr)rr4zutf-8rrrcu 签名错误)rdrergu接收L2_CMD数据为空)rhrirjrrkrlr=rr?rrrmrrRr)rnrorprrq) r.rrrrMrarsrrrr(rtrrrru2s@
 
 
 
 z!L2CommandManager.__listen_commandc
Csœx–y0| t t d|dœ¡ d¡¡¡td|ƒWnVtk
rˆ}z8tdƒt     |¡d|_
y |  ¡Wn YnXPWdd}~XYnXt   t¡qWdS)Nr)rrzutf-8u心跳信息发送成功u心跳信息发送失败)r=rr>rrr?rjrnrorprrqrErvrw)r.rrrrMrtrrrrx[s
 zL2CommandManager.__heart_beatscs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú_L2CommandManager__heart_beatsr)rrr.r4rMrrrzor{z6L2CommandManager.__heartbeats_thread.<locals>.<lambda>)r|T)r}r~rr€)r.rrr4rMrr)rrr.r4rMrr„ms
z$L2CommandManager.__heartbeats_threadcs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú!_L2CommandManager__listen_commandr)rrr.r4rMrrrzur{z:L2CommandManager.__listen_command_thread.<locals>.<lambda>)r|T)r}r~rr€)r.rrr4rMrr)rrr.r4rMrr‚ss
z(L2CommandManager.__listen_command_threadc
Cs®x¨yl|jdkrltdƒt›dtt ¡dƒ›dt dd¡›}| t|¡|_| t||j¡|     t||j¡Wn,t
k
rš}zt   |¡Wdd}~XYnXt  d¡qWdS)Nr…rCièrrO)rrjrrDrErFrGrŽrr‘rnrorprv)r.rLrtrrrr…ys
(z"L2CommandManager.__maintain_clientTcs8|rˆ ¡n&tj‡fdd„d}| d¡| ¡dS)Ncsˆ ¡S)N)Ú"_L2CommandManager__maintain_clientr)rrrrzr{z&L2CommandManager.run.<locals>.<lambda>)r|T)r”r}r~rr€)rrˆrr)rrr‰ˆs
 
 
zL2CommandManager.runN)T) r$r%r&rŠrŽrbr“r’rr‘r”r‰rrrrrŒs
)    rŒÚ__main__z    127.0.0.1i')Ú__doc__rrorFr5r}rErrhZclient_networkrrlZ MSG_TYPE_CMDrUrVrXrZr\ZCLIENT_TYPE_DEALrrwrÚobjectrr'r*rŒr$Zmanagerr‰ÚinputrrrrÚ<module>s: Iw