Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
angel-one
GitHub Repository: angel-one/smartapi-python
Path: blob/main/SmartApi/__pycache__/smartSocket.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\smartSocket.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|jjr|jj|||�dS)N)r�
on_message)r�payload�	is_binaryrrr�	onMessage sz#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)rrrr1sz!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'r5rrrrNs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�|j|j�d}|jjr&|r&tj�}t|j|dd�i}tjs~|rrd|d<t	j
tj|d�|_d|j_
|jj�ntjf|�dS)N�)ZcontextFactoryZtimeoutFZinstallSignalHandlers)�targetrT)r@r4rZisSecurerZClientContextFactoryrrZrunning�	threadingZThreadZrunZwebsocket_threadZdaemon�start)rZthreadedZdisable_ssl_verification�proxyZcontext_factoryZoptsrrr�connectpszSmartSocket.connectcCs"|jr|jj|jjkrdSdSdS)NTF)r�stateZ
STATE_OPEN)rrrr�is_connected�szSmartSocket.is_connectedcCs|jr|jj||�dS)N)rZ	sendClose)rrr rrr�_close�szSmartSocket._closecCs|j||�dS)zClose the WebSocket connection.N)rI)rrr rrr�close�szSmartSocket.closecCs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
        N)r�stop)rrrrrK�szSmartSocket.stopcCs�|}y`dd|j|j|jd�}|jjtjtj|���d||j|j|jd�}|jjtjtj|���dStk
r�}z|j	dj
t|��d��WYdd}~XnXdS)NZcn�)ZtaskZchannel�token�userZacctidTzError while request sending: {})r )r6r7rZsendMessage�six�b�json�dumps�	ExceptionrI�format�str)rrMZstrwatchlistscripsZrequest�errr�send_request�szSmartSocket.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)�printrTrUr)rrrr rrrr=�szSmartSocket._on_closecCs,tdj|t|���|jr(|j|||�dS)z9Call `on_error` callback when connection throws an error.zConnection error: {} - {}N)rXrTrUr)rrrr 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)rr8�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�|j|�}g}�x�|D�]�}|j|dd�}|d@}||jdkrDdnd}||jdkrZdnd	}ytj|j|d
d��}	Wntk
r�d}	YnXytj|j|dd
��}
Wntk
r�d}
YnX|	td<|j|dd�td<|j|dd�td<|j|dd�td<|
td<ggd�}x�ttd
t	|�d��D]h\}}
||dk�r@dndj
|j||
|
d�|j||
d|
d�||j||
d|
ddd�d���q(W|td<qW|j
t�|S) Nrr,��r2g�cAgY@r3FT�,�0�<�@�last_trade_time�4Zoi�8Zoi_day_highZ
oi_day_low�	timestamp)�buy�sell�r-rfrer0�
�H)�byte_format)ZquantityZpriceZorders�depth)�_split_packets�_unpack_int�EXCHANGE_MAPrZ
fromtimestamprS�d�	enumerate�rangerY�append)r�bin�packets�dataZpacketZinstrument_tokenZsegmentZdivisorZtradablerardrk�i�prrrrZ�s<


&
z6SmartSocket._parse_text_message.<locals>._parse_binary)rOZPY2�type�bytes�decoderX�base64Z	b64decoderQ�loads�
ValueError)rrrurZrrrr[�s




zSmartSocket._parse_text_message�IcCstjd||||��dS)z(Unpack binary data as unsgined interger.�>r)�structZunpack)rrsrD�endrjrrrrmszSmartSocket._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*rri)rj)rYrmrqrr)rrsZnumber_of_packetsrt�jrvZ
packet_lengthrrrrlszSmartSocket._split_packets)FN)FFN)NN)NN)r~)r"r#r$rnr4r6r7rr@rFrHrIrJrKrWr?r=r<r>r;r[rmrlrrrrr(?s8




?
r()rO�sysZtimerQr�ZloggingrCr{rZtwisted.internetrrZtwisted.pythonrZtwisted_logZautobahn.twisted.websocketrrrr	r&�objectr(rrrr�<module>s