@@ -39,6 +39,7 @@ def __init__(self, url):
3939 self .url = url
4040
4141 self ._id = 0
42+ self ._sequence = 0
4243 self ._messages = {}
4344 self ._started = False
4445
@@ -78,12 +79,15 @@ def execute(self, command):
7879 return self ._deserialize_result (result , command )
7980
8081 def add_callback (self , event , callback ):
82+ self .add_callback_with_sequence (event , lambda _ , x : callback (x ))
83+
84+ def add_callback_with_sequence (self , event , callback ):
8185 event_name = event .event_class
8286 if event_name not in self .callbacks :
8387 self .callbacks [event_name ] = []
8488
85- def _callback (params ):
86- callback (event .from_json (params ))
89+ def _callback (sequence , params ):
90+ callback (sequence , event .from_json (params ))
8791
8892 self .callbacks [event_name ].append (_callback )
8993 return id (_callback )
@@ -113,7 +117,8 @@ def on_open(ws):
113117 self ._started = True
114118
115119 def on_message (ws , message ):
116- self ._process_message (message )
120+ self ._sequence += 1
121+ self ._process_message (self ._sequence , message )
117122
118123 def on_error (ws , error ):
119124 logger .debug (f"error: { error } " )
@@ -129,7 +134,7 @@ def run_socket():
129134 self ._ws_thread = Thread (target = run_socket )
130135 self ._ws_thread .start ()
131136
132- def _process_message (self , message ):
137+ def _process_message (self , sequence , message ):
133138 message = json .loads (message )
134139 logger .debug (f"<- { message } " [: self ._max_log_message_size ])
135140
@@ -139,7 +144,7 @@ def _process_message(self, message):
139144 if "method" in message :
140145 params = message ["params" ]
141146 for callback in self .callbacks .get (message ["method" ], []):
142- Thread (target = callback , args = (params , )).start ()
147+ Thread (target = callback , args = (sequence , params )).start ()
143148
144149 def _wait_until (self , condition ):
145150 timeout = self ._response_wait_timeout
0 commit comments