Administrator
2024-05-31 c09dd858ba2d6894d1ded8e8da5a46b9b16b05d5
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
111
112
113
114
115
116
117
118
119
120
B
ÚéJfõ=ã@sdZddlZddlZddlZddlZddlZddlZddlmZddl    m
Z
m Z m Z ddl mZmZmZdZdZdZd    Zd
Zd Zd
Zd Zd
Zd Zd    Zd Zd ZdZdZdZ dZ!Gdd„de"ƒZ#Gdd„dƒZ$Gdd„dƒZ%e&dkrþe$ej'ej(dƒZ)e) *¡e+ƒdS)u
外部接口管理
éN)ÚSendResponseSkManager)Ú logger_systemÚlogger_request_apiÚprintlog)Úmiddle_api_protocolÚtoolÚ socket_utilÚheartÚcmdZ
trade_sellééééÚtradeZ    sell_ruleZrefresh_trade_dataÚget_code_position_infoZcommon_requestc@s4eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd S) ÚActionCallbackcCsdS)N©)ÚselfÚ    client_idÚ
request_idÚdatarrú:D:\workspace\trade_cb\utils\outside_api_command_manager.pyÚOnTrade/szActionCallback.OnTradecCsdS)Nr)rrrrrrrÚ
OnSellRule3szActionCallback.OnSellRulecCsdS)Nr)rrrrrrrÚOnRefreshTradeData6sz!ActionCallback.OnRefreshTradeDatacCsdS)Nr)rrrrrrrÚOnGetCodePositionInfo9sz$ActionCallback.OnGetCodePositionInfocCsdS)Nr)rrrrrrrÚOnCommonRequest<szActionCallback.OnCommonRequestN)Ú__name__Ú
__module__Ú __qualname__rrrrrrrrrr-s
rcs¢eZdZiZiZdZdZdZdZ‡fdd„Z    e
dd„ƒZ e
ddd„ƒZ e
dd
d „ƒZ e
d d „ƒZe
dd„ƒZe
dd„ƒZe
dd„ƒZe
dd„ƒZddd„Z‡ZS)ÚApiCommandManagerrNcs"|jstƒj|f|ž|Ž|_|jS)N)Ú    _instanceÚsuperÚ__new__)ÚclsÚargsÚkwargs)Ú    __class__rrr#KszApiCommandManager.__new__c
CsRt tjtj¡}| |j¡| t t     dd|i|dœ¡ 
d¡¡¡|  d¡|S)NÚregisterÚ client_type)ÚtyperÚridzutf-8i) ÚsocketÚAF_INETÚ SOCK_STREAMÚconnectÚip_portÚsendrÚformat_responseÚjsonÚdumpsÚencodeÚrecv)r$r)r+ÚclientrrrÚ__create_clientPs   
z!ApiCommandManager.__create_clientcCsz|›dtt ¡dƒ›dt dd¡›}|dk    r>|d|›7}| ||¡}| |||¡| |||¡td||ƒ||fS)NÚ_ièrzcreate_and_run_client success)ÚroundÚtimeÚrandomÚrandintÚ!_ApiCommandManager__create_clientÚ%_ApiCommandManager__heartbeats_threadÚ)_ApiCommandManager__listen_command_threadr)r$r*ÚindexÚkeyÚskrrrÚ__create_and_run_client[s(  z)ApiCommandManager.__create_and_run_clientécCsT|j ¡||_||_||f|_x.t|ƒD]"}| t|¡}|d|j|d<q*WdS)Nr r)Útrade_client_dictÚclearÚtrade_client_countÚaction_callbackr0ÚrangeÚ)_ApiCommandManager__create_and_run_clientÚCLIENT_TYPE_TRADE_SELL)r$ÚaddrÚportÚtrade_action_callbackrHÚiÚresultrrrÚinitgs
 
 zApiCommandManager.initc CsPxHyÔt |¡d}|rÐt ¡}zNytd||ƒt |¡}|dtkrl| t d|dœ¡     d¡¡w|d}|d}td|ƒ| 
d    ¡}    t  |¡sºtd
ƒt   ||    |d d
d œ¡w|tkrÔ|j ||    |¡nl|tkrî|j ||    |¡nR|tkr
|j ||    |¡n6|tkr&|j ||    |¡n|tkr@|j ||    |¡Wn.tk
rp}
zt |
¡Wdd}
~
XYnXWdtt ¡|ƒ} | d kr²t |¡}t d|dd›¡| t ddi¡     d¡¡Xntdƒ‚Wqtk
rF}
zLt |
¡|tkr||j kr|j  !|¡y | "¡Wn YnXPWdd}
~
XYqXqWdS)Nru 接收数据r*r    )r*rzutf-8ru 接收内容ru 签名错误éÿÿÿÿ)ÚcodeÚmsgéu超时5sä»¥ä¸Šï¼šÚ cmd_recieveu接收的内容为空)#rÚ    recv_datar;rr3ÚloadsÚMSG_TYPE_HEARTr1r4r5ÚgetÚis_client_params_sign_rightrÚsend_error_responseÚAPI_TYPE_TRADErIrÚAPI_TYPE_SELL_RULErÚAPI_TYPE_REFRESH_TRADE_DATArÚAPI_TYPE_GET_CODE_POSITION_INFOrÚAPI_TYPE_COMMON_REQUESTrÚ    ExceptionÚloggingÚ    exceptionÚintrÚinforLrFÚpopÚclose) r$Ú_typerrCrQÚ
start_timeÚ result_jsonrÚ content_typerÚeÚuse_timerrrÚ__listen_commandrs` 
 
 
 
 
 
 
 
 
 
 
 
   z"ApiCommandManager.__listen_commandc
Cs˜x’y&| t t d|dœ¡ d¡¡¡Wn\tk
r„}z>|tkrX||jkrX|j     |¡y | 
¡Wn YnXPWdd}~XYnXt   t ¡qWdS)Nr    )r*rzutf-8)r1rÚ load_headerr3r4r5rcrLrFrhrir;ÚsleepÚHEART_SPACE_TIME)r$rjrrCrnrrrÚ __heart_beats®s&
  zApiCommandManager.__heart_beatscs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú"_ApiCommandManager__listen_commandr)rjr$r+rCrrÚ<lambda>Âóz;ApiCommandManager.__listen_command_thread.<locals>.<lambda>)ÚtargetT)Ú    threadingÚThreadÚ    setDaemonÚstart)r$rjr+rCÚt1r)rjr$r+rCrÚ__listen_command_threadÀs
z)ApiCommandManager.__listen_command_threadcs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú_ApiCommandManager__heart_beatsr)rjr$r+rCrrrvÈrwz7ApiCommandManager.__heartbeats_thread.<locals>.<lambda>)rxT)ryrzr{r|)r$rjr+rCr}r)rjr$r+rCrÚ__heartbeats_threadÆs
z%ApiCommandManager.__heartbeats_threadcCs„t dt ¡›¡xjyNt|jƒ|jkrbx8t|jt|jƒƒD] }| t    ¡}|d|j|d<q>WWn YnXt
  d¡qWdS)Nu'outside_api __maintain_client çº¿ç¨‹ID:r r) rrgrÚ get_thread_idÚlenrFrHrJrKrLr;rr)r$rPrQrrrÚ__maintain_clientÌs
z#ApiCommandManager.__maintain_clientTcs8|rˆ ¡n&tj‡fdd„d}| d¡| ¡dS)Ncsˆ ¡S)N)Ú#_ApiCommandManager__maintain_clientr)rrrrvßrwz'ApiCommandManager.run.<locals>.<lambda>)rxT)r„ryrzr{r|)rÚblockingr}r)rrÚrunÚs
 
 
zApiCommandManager.run)N)rE)T)rrrZcommon_client_dictrFrHZcommon_client_countrIr!r#Ú classmethodr>rKrRrurr@r?r„r†Ú __classcell__rr)r'rr Bs$   
<    r csœeZdZdZiZiZdZdZ‡fdd„Ze    dd„ƒZ
e    ddd„ƒZ e    d    d
„ƒZ e    d d „ƒZ e    d d„ƒZe    dd„ƒZe    dd„ƒZe    dd„ƒZddd„Z‡ZS)ÚNewApiCommandManageru"
    æ–°ç‰ˆäº¤æ˜“指令管理
    Ncs"|jstƒj|f|ž|Ž|_|jS)N)r!r"r#)r$r%r&)r'rrr#îszNewApiCommandManager.__new__c
CsRt tjtj¡}| |j¡| t t     dd|i|dœ¡ 
d¡¡¡|  d¡|S)Nr(r))r*rr+zutf-8i) r,r-r.r/r0r1rr2r3r4r5r6)r$r)r+r7rrrr8ós   
z$NewApiCommandManager.__create_clientcCsz|›dtt ¡dƒ›dt dd¡›}|dk    r>|d|›7}| ||¡}| |||¡| |||¡td||ƒ||fS)Nr9ièrzcreate_and_run_client success)r:r;r<r=Ú$_NewApiCommandManager__create_clientÚ(_NewApiCommandManager__heartbeats_threadÚ,_NewApiCommandManager__listen_command_threadr)r$r*rArBrCrrrrDþs(  z,NewApiCommandManager.__create_and_run_clientc    Cs |j ¡|j ¡||_||f|_x,|D]$}i|j|d<|d|j|d<q*WxH|jD]>}x8t|j|ƒD]&}| ||¡}|d|j||d<qnWqZWdS)uä
        åˆå§‹åŒ–
        :param addr: æœåŠ¡å™¨åœ°å€
        :param port: æœåŠ¡å™¨ç«¯å£
        :param trade_action_callback: å›žè°ƒ
        :param clients_info: å®¢æˆ·ç«¯ä¿¡æ¯ï¼š[(类型,数量)]
        :return:
        rr N)Ú client_dictrGÚclient_count_dictrIr0rJÚ,_NewApiCommandManager__create_and_run_client)    r$rMrNrIZ clients_infoÚ client_infor)rPrQrrrrR
s
 
 
 
 
  zNewApiCommandManager.initc CsܐxԐyVt |¡d}|rRt ¡}zÒy td||ƒt |¡}|dtkrh| t d|dœ¡     d¡¡w|d}|d}td|ƒ| 
d    ¡}    t  |¡s¶td
ƒt   ||    |d d
d œ¡w| ||    |¡Wn,tk
rò}
zt |
¡Wdd}
~
XYnXWdtt ¡|ƒ} | d kr4t |¡}t d|dd›¡| t ddi¡     d¡¡Xntdƒ‚Wqtk
rÒ}
zVt |
¡||jkr¦||j|kr¦|j| |¡y | ¡Wn YnXPWdd}
~
XYqXqWdS)Nru 接收数据r*r    )r*rzutf-8ru 接收内容ru 签名错误rS)rTrUrVu超时5s以上:rWu接收的内容为空)rrXr;rr3rYrZr1r4r5r[r\rr]rIrcrdrerfrrgrrhri) r$rjrrCrQrkrlrrmrrnrorrrrp#sN 
 
 
 
 
  
 
 
  z%NewApiCommandManager.__listen_commandc
Cs¢xœy&| t t d|dœ¡ d¡¡¡Wnftk
rŽ}zH||jkrb||j|krb|j| |¡y |     ¡Wn YnXPWdd}~XYnXt
  t ¡qWdS)Nr    )r*rzutf-8) r1rrqr3r4r5rcrrhrir;rrrs)r$rjrrCrnrrrrtTs&
 z"NewApiCommandManager.__heart_beatscs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú%_NewApiCommandManager__listen_commandr)rjr$r+rCrrrvhrwz>NewApiCommandManager.__listen_command_thread.<locals>.<lambda>)rxT)ryrzr{r|)r$rjr+rCr}r)rjr$r+rCrr~fs
z,NewApiCommandManager.__listen_command_threadcs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú"_NewApiCommandManager__heart_beatsr)rjr$r+rCrrrvnrwz:NewApiCommandManager.__heartbeats_thread.<locals>.<lambda>)rxT)ryrzr{r|)r$rjr+rCr}r)rjr$r+rCrr€ls
z(NewApiCommandManager.__heartbeats_threadcCs¨t dt ¡›¡xŽyrxl|jD]b}t|j|ƒ|j|kr xDt|j|t|j|ƒƒD]$}| |¡}|d|j||d<qZWq WWn YnXt     
d¡qWdS)Nu'outside_api __maintain_client çº¿ç¨‹ID:r r) rrgrrrŽr‚rrJrr;rr)r$r)rPrQrrrrƒrs "
"z&NewApiCommandManager.__maintain_clientTcs8|rˆ ¡n&tj‡fdd„d}| d¡| ¡dS)Ncsˆ ¡S)N)Ú&_NewApiCommandManager__maintain_clientr)rrrrv†rwz*NewApiCommandManager.run.<locals>.<lambda>)rxT)r“ryrzr{r|)rr…r}r)rrr†s
 
 
zNewApiCommandManager.run)N)T)rrrÚ__doc__rrŽrIr!r#r‡rŠrrRr‘r’rŒr‹r“r†rˆrr)r'rr‰äs     1    r‰Ú__main__),r”r3rdr<r,ryr;Zhuaxin_client.client_networkrÚlog_module.logrrrÚutilsrrrrZÚ MSG_TYPE_CMDrLrsZTRADE_DIRECTION_BUYZTRADE_DIRECTION_SELLZTRADE_TYPE_ORDERZTRADE_TYPE_CANCEL_ORDERZ OPERRATE_SETZOPERRATE_DELETEZ OPERRATE_GETZ OPERRATE_ADDr^r_r`rarbÚobjectrr r‰rÚ SERVER_HOSTÚ SERVER_PORTÚmanagerr†ÚinputrrrrÚ<module>sF #(