|
23 | 23 | class BrokerSelector:
|
24 | 24 | def __init__(self):
|
25 | 25 | self.selected_broker = None
|
| 26 | + print("BrokerSelector initialized") |
26 | 27 |
|
27 | 28 | async def handle_client(self, reader, writer):
|
| 29 | + print("New client connection received") |
28 | 30 | data = await reader.read(100)
|
29 | 31 | message = data.decode()
|
30 | 32 | addr = writer.get_extra_info("peername")
|
@@ -56,38 +58,56 @@ async def handle_client(self, reader, writer):
|
56 | 58 | await writer.wait_closed()
|
57 | 59 |
|
58 | 60 | async def start_ipc_server(self):
|
59 |
| - server = await asyncio.start_server(self.handle_client, "127.0.0.1", IPC_PORT) |
60 |
| - |
61 |
| - addr = server.sockets[0].getsockname() |
62 |
| - print(f"Serving on {addr}") |
| 61 | + try: |
| 62 | + server = await asyncio.start_server( |
| 63 | + self.handle_client, |
| 64 | + '127.0.0.1', |
| 65 | + IPC_PORT |
| 66 | + ) |
| 67 | + addr = server.sockets[0].getsockname() |
| 68 | + print(f"IPC Server running on {addr}") |
63 | 69 |
|
64 |
| - async with server: |
65 |
| - await server.serve_forever() |
| 70 | + async with server: |
| 71 | + await server.serve_forever() |
| 72 | + except Exception as e: |
| 73 | + print(f"Error starting IPC server: {e}") |
66 | 74 |
|
67 | 75 |
|
68 | 76 | async def main():
|
69 |
| - broker_selector = BrokerSelector() |
70 |
| - |
71 |
| - # Start the IPC server |
72 |
| - asyncio.create_task(broker_selector.start_ipc_server()) |
73 |
| - |
74 |
| - print("WebSocket server starting...") |
75 |
| - while not broker_selector.selected_broker: |
76 |
| - await asyncio.sleep(1) |
77 |
| - |
78 |
| - selected_broker = broker_selector.selected_broker |
79 |
| - print(f"Selected broker: {selected_broker}") |
80 |
| - |
81 |
| - ws_port = BROKER_PORTS[selected_broker] |
82 |
| - print(f"Starting {selected_broker.capitalize()} WebSocket on port {ws_port}...") |
83 |
| - |
84 |
| - if selected_broker == "flattrade": |
85 |
| - flattrade_initialize_api() |
86 |
| - await flattrade_main(ws_port) |
87 |
| - elif selected_broker == "shoonya": |
88 |
| - shoonya_initialize_api() |
89 |
| - await shoonya_main(ws_port) |
| 77 | + try: |
| 78 | + broker_selector = BrokerSelector() |
| 79 | + |
| 80 | + # Start the IPC server and store the task |
| 81 | + ipc_server_task = asyncio.create_task(broker_selector.start_ipc_server()) |
| 82 | + |
| 83 | + print("WebSocket server starting...") |
| 84 | + print("Waiting for broker selection...") |
| 85 | + |
| 86 | + while not broker_selector.selected_broker: |
| 87 | + await asyncio.sleep(1) |
| 88 | + print("Waiting for broker selection...") |
| 89 | + |
| 90 | + selected_broker = broker_selector.selected_broker |
| 91 | + print(f"Selected broker: {selected_broker}") |
| 92 | + |
| 93 | + ws_port = BROKER_PORTS[selected_broker] |
| 94 | + print(f"Starting {selected_broker.capitalize()} WebSocket on port {ws_port}...") |
| 95 | + |
| 96 | + if selected_broker == "flattrade": |
| 97 | + flattrade_initialize_api() |
| 98 | + await flattrade_main(ws_port) |
| 99 | + elif selected_broker == "shoonya": |
| 100 | + shoonya_initialize_api() |
| 101 | + await shoonya_main(ws_port) |
| 102 | + |
| 103 | + except Exception as e: |
| 104 | + print(f"Error in main: {e}") |
90 | 105 |
|
91 | 106 |
|
92 | 107 | if __name__ == "__main__":
|
93 |
| - asyncio.run(main()) |
| 108 | + try: |
| 109 | + asyncio.run(main()) |
| 110 | + except KeyboardInterrupt: |
| 111 | + print("Server shutting down...") |
| 112 | + except Exception as e: |
| 113 | + print(f"Fatal error: {e}") |
0 commit comments