Skip to content

Commit

Permalink
Add RustError
Browse files Browse the repository at this point in the history
  • Loading branch information
olijeffers0n committed Oct 19, 2024
1 parent 4127139 commit 832b446
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 58 deletions.
3 changes: 2 additions & 1 deletion rustplus/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
from .commands import CommandOptions, ChatCommand
from .events import ChatEventPayload, TeamEventPayload, EntityEventPayload
from .utils import convert_event_type_to_name, Emoji
from .structs import RustError, RustMarker

__name__ = "rustplus"
__author__ = "olijeffers0n"
__version__ = "6.0.2"
__version__ = "6.0.3"
__support__ = "Discord: https://discord.gg/nQqJe8qvP8"
40 changes: 26 additions & 14 deletions rustplus/remote/websocket/ws.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,19 @@

from ..camera import CameraManager
from ..proxy import ProxyValueGrabber
from ..rustplus_proto import AppMessage, AppRequest
from ..rustplus_proto import AppMessage, AppRequest, AppError
from ...commands import CommandOptions, ChatCommand, ChatCommandTime
from ...events import (
ProtobufEventPayload,
EntityEventPayload,
TeamEventPayload,
ChatEventPayload,
)
from ...exceptions import ClientNotConnectedError, RequestError
from ...exceptions import RequestError
from ...identification import ServerDetails, RegisteredListener
from ...structs import RustChatMessage, RustTeamInfo
from ...utils import YieldingEvent, convert_time
from ...utils.utils import error_present


class RustWebsocket:
Expand Down Expand Up @@ -133,14 +134,21 @@ async def run(self) -> None:
)

async def send_and_get(self, request: AppRequest) -> AppMessage:
await self.send_message(request)
if not await self.send_message(request):
message = AppMessage()
error = AppError()
error.error = "Message Failed to send"
message.response.seq = request.seq
message.response.error = error
return message
return await self.get_response(request.seq)

async def send_message(
self, request: AppRequest, ignore_response: bool = False
) -> None:
) -> bool:
if self.connection is None:
raise ClientNotConnectedError("No Current Websocket Connection")
self.logger.warning("No Current Websocket Connection")
return False

if self.debug:
self.logger.info(f"Sending Message with seq {request.seq}: {request}")
Expand All @@ -157,6 +165,9 @@ async def send_message(
await self.connection.send(bytes(request))
except Exception as err:
self.logger.warning("WebSocket connection error: %s", err)
return False

return True

async def get_response(self, seq: int) -> Union[AppMessage, None]:

Expand All @@ -171,8 +182,16 @@ async def handle_message(self, app_message: AppMessage) -> None:
f"Received Message with seq {app_message.response.seq}: {app_message}"
)

if self.error_present(app_message.response.error.error):
raise RequestError(app_message.response.error.error)
if error_present(app_message):

event: YieldingEvent = self.responses.get(app_message.response.seq, None)
if event is not None:
if self.debug:
self.logger.info(f"Running Response Event With Error: {app_message}")

event.set_with_value(app_message)
else:
raise RequestError(app_message.response.error.error)

prefix = self.get_prefix(
str(app_message.broadcast.team_message.message.message)
Expand Down Expand Up @@ -335,13 +354,6 @@ def get_proto_cost(app_request: AppRequest) -> int:

raise ValueError()

@staticmethod
def error_present(message) -> bool:
"""
Checks message for error
"""
return message != ""

@staticmethod
async def run_coroutine_non_blocking(coroutine: Coroutine) -> Task:
loop: AbstractEventLoop = asyncio.get_event_loop_policy().get_event_loop()
Expand Down
Loading

0 comments on commit 832b446

Please sign in to comment.