Administrator
2025-06-12 4e5eed2226fae6a057c454155565211dbc9349e9
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
B
[ýe+!ã@sìdZddlZddlZddlZddlZddlZddlZddlmZddl    m
Z
m Z ddl m Z mZmZdZdZdZd    Zd
Zd Zd
Zd Zd
Zd Zd    Zd Zd ZdZdZdZGdd„de ƒZ!Gdd„dƒZ"e#dkrèe"e j$e j%dƒZ&e& '¡e(ƒdS)u
外部接口管理
éN)ÚSendResponseSkManager)Ú logger_systemÚlogger_request_api)Úmiddle_api_protocolÚtoolÚ socket_utilÚheartÚcmdZ
trade_sellééééÚtradeZ    sell_ruleZrefresh_trade_dataZget_code_position_infoc@s,eZdZdd„Zdd„Zdd„Zdd„Zd    S)
ÚActionCallbackcCsdS)N©)ÚselfÚ    client_idÚ
request_idÚdatarrú<D:\workspace\trade_sell\utils\outside_api_command_manager.pyÚOnTrade.szActionCallback.OnTradecCsdS)Nr)rrrrrrrÚ
OnSellRule2szActionCallback.OnSellRulecCsdS)Nr)rrrrrrrÚOnRefreshTradeData5sz!ActionCallback.OnRefreshTradeDatacCsdS)Nr)rrrrrrrÚOnGetCodePositionInfo8sz$ActionCallback.OnGetCodePositionInfoN)Ú__name__Ú
__module__Ú __qualname__rrrrrrrrr,srcs¢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 GszApiCommandManager.__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(ÚclientrrrZ__create_clientLs   
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_threadÚprint)r!r'ÚindexÚkeyÚskrrrZ__create_and_run_clientWs(  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_callbackr-ÚrangeÚ)_ApiCommandManager__create_and_run_clientÚCLIENT_TYPE_TRADE_SELL)r!ÚaddrÚportZtrade_action_callbackrDÚiÚresultrrrÚinitcs
 
 zApiCommandManager.initc Cs2x*y¶t |¡d}|r²t ¡}z0yütd||ƒt |¡}|dtkrj| t d|dœ¡     d¡¡w|d}|d}td|ƒ| 
d    ¡}    t  |¡s¸td
ƒt   ||    |d d
d œ¡w|tkrÒ|j ||    |¡nP|tkrì|j ||    |¡n6|tkr|j ||    |¡n|tkr"|j ||    |¡Wn.tk
rR}
zt |
¡Wdd}
~
XYnXWdtt ¡|ƒ} | d kr”t |¡}t d|dd›¡| t ddi¡     d¡¡Xntdƒ‚Wqtk
r(}
zLt |
¡|tkrü||jkrü|j |¡y |  ¡Wn YnXPWdd}
~
XYqXqWdS)Nru 接收数据r'r)r'rzutf-8ru 接收内容ru 签名错误éÿÿÿÿ)ÚcodeÚmsgéu超时5s以上:Z cmd_recieveu接收的内容为空)!rÚ    recv_datar7r=r0ÚloadsÚMSG_TYPE_HEARTr.r1r2ÚgetÚis_client_params_sign_rightrÚsend_error_responseÚAPI_TYPE_TRADErErÚAPI_TYPE_SELL_RULErÚAPI_TYPE_REFRESH_TRADE_DATArÚAPI_TYPE_GET_CODE_POSITION_INFOrÚ    ExceptionÚloggingÚ    exceptionÚintrÚinforHrBÚpopÚclose) r!Ú_typerr@rLÚ
start_timeÚ result_jsonrÚ content_typerÚeÚuse_timerrrZ__listen_commandns\ 
 
 
 
 
 
 
 
 
 
 
   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)r.rÚ load_headerr0r1r2r\rHrBrarbr7ÚsleepÚHEART_SPACE_TIME)r!rcrr@rgrrrZ __heart_beats¨s&
  zApiCommandManager.__heart_beatscs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú"_ApiCommandManager__listen_commandr)rcr!r(r@rrÚ<lambda>¼óz;ApiCommandManager.__listen_command_thread.<locals>.<lambda>)ÚtargetT)Ú    threadingÚThreadÚ    setDaemonÚstart)r!rcr(r@Út1r)rcr!r(r@rZ__listen_command_threadºs
z)ApiCommandManager.__listen_command_threadcs0tj‡‡‡‡fdd„d}| d¡| ¡dS)Ncsˆ ˆˆˆ¡S)N)Ú_ApiCommandManager__heart_beatsr)rcr!r(r@rrrmÂrnz7ApiCommandManager.__heartbeats_thread.<locals>.<lambda>)roT)rprqrrrs)r!rcr(r@rtr)rcr!r(r@rZ__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) rr`rÚ get_thread_idÚlenrBrDrFrGrHr7rj)r!rKrLrrrZ__maintain_clientÆs
z#ApiCommandManager.__maintain_clientTcs8|rˆ ¡n&tj‡fdd„d}| d¡| ¡dS)Ncsˆ ¡S)N)Ú#_ApiCommandManager__maintain_clientr)rrrrmÙrnz'ApiCommandManager.run.<locals>.<lambda>)roT)rxrprqrrrs)rÚblockingrtr)rrÚrunÔs
 
 
zApiCommandManager.run)N)rA)T)rrrZcommon_client_dictrBrDZcommon_client_countrErr Ú classmethodr:rGrMrlrur<r;rxrzÚ __classcell__rr)r$rr>s$   
:    rÚ__main__))Ú__doc__r0r]r8r)rpr7Úhuaxin_client.client_networkrÚlog_module.logrrÚutilsrrrrTZ MSG_TYPE_CMDrHrkÚTRADE_DIRECTION_BUYÚTRADE_DIRECTION_SELLÚTRADE_TYPE_ORDERZTRADE_TYPE_CANCEL_ORDERÚ OPERRATE_SETÚOPERRATE_DELETEÚ OPERRATE_GETÚ OPERRATE_ADDrXrYrZr[ÚobjectrrrÚ SERVER_HOSTÚ SERVER_PORTÚmanagerrzÚinputrrrrÚ<module>s@ !