Skip to content

Commit

Permalink
fix: Reconnect issue
Browse files Browse the repository at this point in the history
  • Loading branch information
null2264 committed Jul 19, 2023
1 parent 94e0bcc commit 1917b76
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
15 changes: 7 additions & 8 deletions nexus/core/api.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import asyncio
import datetime as dt
import os
import random
Expand Down Expand Up @@ -72,9 +71,13 @@ def __init__(self, context: Optional[zmq.asyncio.Context] = None, *args, **kwarg

self.logger = getLogger("uvicorn")

asyncio.create_task(self.__ainit__())
self.initSockets()

async def __ainit__(self) -> None:
def initSockets(self) -> None:
self.connectReqSocket()
self.connectSubSocket()

def connectReqSocket(self):
dest = os.getenv("DASHBOARD_ZMQ_REQ")
if not dest:
raise RuntimeError("Nexus requires at least a request socket to function properly!")
Expand All @@ -83,18 +86,14 @@ async def __ainit__(self) -> None:
self.reqSocket.setsockopt(zmq.RCVTIMEO, constants.REQUEST_TIMEOUT)
self.reqSocket.connect(f"tcp://{dest}")

def connectSubSocket(self):
subDest = os.getenv("DASHBOARD_ZMQ_SUB")
if subDest:
self.subSocket = self.context.socket(zmq.SUB)
self.subSocket.setsockopt(zmq.IPV6, True)
self.subSocket.setsockopt(zmq.SUBSCRIBE, b"guild.update")
self.subSocket.connect(f"tcp://{subDest}")

def reconnectReqSocket(self):
self.reqSocket.close(linger=0)
self.logger.info("Reconnecting to bot...")
self.reqSocket.connect(f"tcp://{os.getenv('DASHBOARD_ZMQ_REQ')}")

def snowflake(self, datetime: Optional[dt.datetime] = None, /, *, high: bool = False) -> int:
"""Simplified version of how discord ID generated
Expand Down
4 changes: 2 additions & 2 deletions nexus/core/routes/ng/meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ async def requestBot(app: "Nexus", requestMessage: dict, userId: Optional[str] =
app.logger.info("Sending request...")
await app.reqSocket.send_string(request)
app.logger.info("Receiving response...")
string = await asyncio.wait_for(app.reqSocket.recv_string(), timeout=25.0)
string = await asyncio.wait_for(app.reqSocket.recv_string(), timeout=constants.REQUEST_TIMEOUT / 1000)
message = json.loads(string)
return message
except (Exception, asyncio.CancelledError) as e:
Expand All @@ -60,7 +60,7 @@ async def requestBot(app: "Nexus", requestMessage: dict, userId: Optional[str] =
if retries >= constants.REQUEST_RETRIES:
raise HTTPException(502, str(e))

app.reconnectReqSocket()
app.connectReqSocket()
retries += 1
app.logger.info("Retrying...")
continue # we let the loop retry the send request
Expand Down

0 comments on commit 1917b76

Please sign in to comment.