da03 commited on
Commit
d20b0fd
·
1 Parent(s): a5eff0d
Files changed (1) hide show
  1. main.py +43 -33
main.py CHANGED
@@ -234,8 +234,8 @@ async def websocket_endpoint(websocket: WebSocket):
234
  finally:
235
  is_processing = False
236
  print(f"[{time.perf_counter():.3f}] Processing complete. Queue size before checking next input: {input_queue.qsize()}")
237
- # Check if we have more inputs to process after this one
238
- asyncio.create_task(process_next_input())
239
 
240
  async def process_next_input():
241
  nonlocal is_processing
@@ -243,6 +243,7 @@ async def websocket_endpoint(websocket: WebSocket):
243
  current_time = time.perf_counter()
244
  if input_queue.empty():
245
  print(f"[{current_time:.3f}] No inputs to process. Queue is empty.")
 
246
  return
247
 
248
  if is_processing:
@@ -255,37 +256,46 @@ async def websocket_endpoint(websocket: WebSocket):
255
  queue_size = input_queue.qsize()
256
  print(f"[{current_time:.3f}] Processing next input. Queue size: {queue_size}")
257
 
258
- # Initialize variables to track progress
259
- skipped = 0
260
- latest_input = None
261
-
262
- # Process the queue one item at a time
263
- while not input_queue.empty():
264
- current_input = await input_queue.get()
265
- #input_queue.task_done()
266
-
267
- # Always update the latest input
268
- latest_input = current_input
269
-
270
- # Check if this is an interesting event
271
- is_interesting = (current_input.get("is_left_click") or
272
- current_input.get("is_right_click") or
273
- (current_input.get("keys_down") and len(current_input.get("keys_down")) > 0) or
274
- (current_input.get("keys_up") and len(current_input.get("keys_up")) > 0))
275
-
276
- # Process immediately if interesting
277
- if is_interesting:
278
- print(f"[{current_time:.3f}] Found interesting input (skipped {skipped} events)")
279
- process_input(current_input)
280
-
281
- # Otherwise, continue to the next item
282
- skipped += 1
283
 
284
- # If this is the last item and no interesting inputs were found
285
- if input_queue.empty():
286
- print(f"[{current_time:.3f}] No interesting inputs, processing latest movement (skipped {skipped-1} events)")
287
- process_input(latest_input)
288
- is_processing = False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
 
290
  while True:
291
  try:
@@ -306,7 +316,7 @@ async def websocket_endpoint(websocket: WebSocket):
306
  if not is_processing:
307
  print(f"[{receive_time:.3f}] Not currently processing, will call process_next_input()")
308
  is_processing = True
309
- asyncio.create_task(process_next_input())
310
  else:
311
  print(f"[{receive_time:.3f}] Currently processing, new input queued for later")
312
 
 
234
  finally:
235
  is_processing = False
236
  print(f"[{time.perf_counter():.3f}] Processing complete. Queue size before checking next input: {input_queue.qsize()}")
237
+ # Check if we have more inputs to process after this one TODO
238
+ #asyncio.create_task(process_next_input())
239
 
240
  async def process_next_input():
241
  nonlocal is_processing
 
243
  current_time = time.perf_counter()
244
  if input_queue.empty():
245
  print(f"[{current_time:.3f}] No inputs to process. Queue is empty.")
246
+ is_processing = False
247
  return
248
 
249
  if is_processing:
 
256
  queue_size = input_queue.qsize()
257
  print(f"[{current_time:.3f}] Processing next input. Queue size: {queue_size}")
258
 
259
+ try:
260
+ # Initialize variables to track progress
261
+ skipped = 0
262
+ latest_input = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
 
264
+ # Process the queue one item at a time
265
+ while not input_queue.empty():
266
+ current_input = await input_queue.get()
267
+ input_queue.task_done()
268
+
269
+ # Always update the latest input
270
+ latest_input = current_input
271
+
272
+ # Check if this is an interesting event
273
+ is_interesting = (current_input.get("is_left_click") or
274
+ current_input.get("is_right_click") or
275
+ (current_input.get("keys_down") and len(current_input.get("keys_down")) > 0) or
276
+ (current_input.get("keys_up") and len(current_input.get("keys_up")) > 0))
277
+
278
+ # Process immediately if interesting
279
+ if is_interesting:
280
+ print(f"[{current_time:.3f}] Found interesting input (skipped {skipped} events)")
281
+ await process_input(current_input) # AWAIT here instead of creating a task
282
+ is_processing = False
283
+ return
284
+
285
+ # Otherwise, continue to the next item
286
+ skipped += 1
287
+
288
+ # If this is the last item and no interesting inputs were found
289
+ if input_queue.empty():
290
+ print(f"[{current_time:.3f}] No interesting inputs, processing latest movement (skipped {skipped-1} events)")
291
+ await process_input(latest_input) # AWAIT here instead of creating a task
292
+ is_processing = False
293
+ return
294
+ except Exception as e:
295
+ print(f"[{current_time:.3f}] Error in process_next_input: {e}")
296
+ import traceback
297
+ traceback.print_exc()
298
+ is_processing = False # Make sure to reset on error
299
 
300
  while True:
301
  try:
 
316
  if not is_processing:
317
  print(f"[{receive_time:.3f}] Not currently processing, will call process_next_input()")
318
  is_processing = True
319
+ asyncio.create_task(process_next_input()) # Create task but don't await it
320
  else:
321
  print(f"[{receive_time:.3f}] Currently processing, new input queued for later")
322