Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
angel-one
GitHub Repository: angel-one/smartapi-python
Path: blob/main/SmartApi/__pycache__/socketTP.cpython-36.pyc
413 views
3

���_{*�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
mZddlm
ZddlmZmZmZGdd�de�ZGdd	�d	e�ZGd
d�de�ZdS)�N)�datetime)�reactor�ssl)�log)�WebSocketClientProtocol�WebSocketClientFactory�	connectWScs<eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Z�ZS)�SmartSocketClientProtocolcstt|�j||�dS)N)�superr	�__init__)�self�args�kwargs)�	__class__��'C:\smartapi-python\SmartApi\socketTP.pyrsz"SmartSocketClientProtocol.__init__cCs"||j_|jjr|jj||�dS)z7Called when WebSocket server connection was establishedN)�factory�ws�
on_connect)r�responserrr�	onConnectsz#SmartSocketClientProtocol.onConnectcCs|jjr|jj|�dS)N)r�on_open)rrrr�onOpensz SmartSocketClientProtocol.onOpencCs(td||�|jjr$|jj|||�dS)Nz/Called when text or binary message is received.)�printr�
on_message)r�payload�	is_binaryrrr�	onMessagesz#SmartSocketClientProtocol.onMessagecCs8|s|jjr|jj|||�|jjr4|jj|||�dS)z!Called when connection is closed.N)r�on_error�on_close)rZ	was_clean�code�reasonrrr�onClose$s
z!SmartSocketClientProtocol.onClose)	�__name__�
__module__�__qualname__rrrrr"�
__classcell__rr)rrr	s
r	cs eZdZeZ�fdd�Z�ZS)�SmartSocketClientFactorycs@d|_d|_d|_d|_d|_d|_d|_tt|�j	||�dS)z/Initialize with default callback method values.FN)
�debugrrrrrrr
r'r)rr
r)rrrr0sz!SmartSocketClientFactory.__init__)r#r$r%r	Zprotocolrr&rr)rrr'-sr'c
@s�eZdZddddddddd	d
�	ZdZdZdZd/dd�Zdd�Zd0dd�Z	dd�Z
d1dd�Zd2dd�Zdd�Z
dd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd3d+d,�Zd-d.�ZdS)4�SmartSocket���������	)	ZnseZnfo�cdsZbseZbfoZbsecdsZmcxZmcxsx�indicesz>wss://omnefeeds.angelbroking.com/NestHtml5Mobile/socket/streamNFcCsF|p|j|_||_||_||_d|_d|_d|_d|_d|_	d|_
dS)N)�ROOT_URI�root�
feed_token�client_coder(�on_ticksrrrrr)r�
FEED_TOKEN�CLIENT_CODEr(r6rrrrMszSmartSocket.__init__cKsXt|f|�|_|jj|_|j|j_|j|j_|j|j_|j|j_	|j
|j_|j|j_
dS)z%Create a WebSocket client connection.N)r'rrr(�_on_openr�	_on_errorr�	_on_closer�_on_messager�_on_connectr)rZurlrrrr�_create_connection^s





zSmartSocket._create_connectioncCs�td�|j|j�d}t|jj|�|jjr<|r<tj�}td|�t|j|dd�i}tj	s�|r�td�d|d<t
jtj|d�|_
d	|j
_|j
j�ntjf|�dS)
NZConnect�context_factory�)ZcontextFactoryZtimeoutzinside threadedFZinstallSignalHandlers)�targetrT)rrAr5rZisSecurerZClientContextFactoryrrZrunning�	threadingZThreadZrunZwebsocket_threadZdaemon�start)rZthreadedZdisable_ssl_verification�proxyrBZoptsrrr�connectos"
zSmartSocket.connectcCs*td�|jr"|jj|jjkr"dSdSdS)Nz-Check if WebSocket connection is established.TF)rr�stateZ
STATE_OPEN)rrrr�is_connected�szSmartSocket.is_connectedcCs td�|jr|jj||�dS)NzClose the WebSocket connection.)rrZ	sendClose)rr r!rrr�_close�szSmartSocket._closecCs|j||�dS)zClose the WebSocket connection.N)rK)rr r!rrr�close�szSmartSocket.closecCstd�tj�dS)z�Stop the event loop. Should be used if main thread has to be closed in `on_close` method.
        Reconnection mechanism cannot happen past this method
        �stopN)rrrM)rrrrrM�szSmartSocket.stopcCs�td�d}y�td�dd|j|j|jd�}|jjtjtj|���t|�d||j|j|jd�}t|�|jjtjtj|���t|�dSt	k
r�}z|j
djt|��d	��WYdd}~XnXdS)
NzRequest Sendz$nse_cm|2885&nse_cm|1594&nse_cm|11536ZInsideZcn�)ZtaskZchannel�token�userZacctidTzError while request sending: {})r!)
rr7r8rZsendMessage�six�b�json�dumps�	ExceptionrK�format�str)rrOZstrwatchlistscripsZrequest�errr�send_request�s"zSmartSocket.send_requestcCs||_|jr|j||�dS)N)rr)rrrrrrr@�szSmartSocket._on_connectcCs,tdj|t|���|jr(|j|||�dS)z3Call `on_close` callback when connection is closed.zConnection closed: {} - {}N)rrVrWr)rrr r!rrrr>�szSmartSocket._on_closecCs,tdj|t|���|jr(|j|||�dS)z9Call `on_error` callback when connection throws an error.zConnection error: {} - {}N)rrVrWr)rrr r!rrrr=�szSmartSocket._on_errorcCsN|jr|j|||�|jr<|r<t|�dkr<|j||j|��|sJ|j|�dS)z9Call `on_message` callback when text message is received.r-N)rr9�len�
_parse_binary�_parse_text_message)rrrrrrrr?�szSmartSocket._on_messagecCs|jr|j|�SdS)N)r)rrrrrr<�szSmartSocket._on_opencCsvtjr<t|�tkr<|jd�}td|�tj|�}td|�ytj	|�}td|�Wnt
k
rhdSXdd�}dS)zParse text message.zutf-8ZPAYLOADZDATANcSs�td�|j|�}g}�x�|D�]�}|j|dd�}|d@}||jdkrLdnd}||jdkrbd	nd
}ytj|j|dd��}	Wntk
r�d}	YnXytj|j|d
d��}
Wntk
r�d}
YnX|	td<|j|dd�td<|j|dd�td<|j|dd
�td<|
td<ggd�}x�tt	dt
|�d��D]h\}}
||dk�rHdndj|j||
|
d�|j||
d|
d�||j||
d|
ddd�d���q0W|td <qW|jt�|S)!Nz1Parse binary data to a (list of) ticks structure.rr-��r3g�cAgY@r4FT�,�0�<�@�last_trade_time�4Zoi�8Zoi_day_highZ
oi_day_low�	timestamp)�buy�sell�r.rgrfr1�
�H)�byte_format)ZquantityZpriceZorders�depth)r�_split_packets�_unpack_int�EXCHANGE_MAPrZ
fromtimestamprU�d�	enumerate�rangerZ�append)r�bin�packets�dataZpacketZinstrument_tokenZsegmentZdivisorZtradablerbrerl�i�prrrr[�s>


&
z6SmartSocket._parse_text_message.<locals>._parse_binary)rQZPY2�type�bytes�decoder�base64Z	b64decoderS�loads�
ValueError)rrrvr[rrrr\�s




zSmartSocket._parse_text_message�IcCstjd||||��dS)z(Unpack binary data as unsgined interger.�>r)�structZunpack)rrtrF�endrkrrrrnszSmartSocket._unpack_intcCs�t|�dkrgS|j|dddd�}g}d}xPt|�D]D}|j|||ddd�}|j||d|d|��|d|}q4W|S)z.Split the data to individual packets of ticks.r+rrj)rk)rZrnrrrs)rrtZnumber_of_packetsru�jrwZ
packet_lengthrrrrmszSmartSocket._split_packets)FN)FFN)NN)NN)r)r#r$r%ror5r7r8rrArHrJrKrLrMrYr@r>r=r?r<r\rnrmrrrrr)>s8




?
r))rQ�sysZtimerSr�ZloggingrEr|rZtwisted.internetrrZtwisted.pythonrZtwisted_logZautobahn.twisted.websocketrrrr	r'�objectr)rrrr�<module>s