diff --git a/.efrocachemap b/.efrocachemap index 42f5b5b3..9b0a8044 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,7 +420,7 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/60/ad/38269b7f1c7dc20cb9a506cd0681", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/72/85/d6fc4d16b7081d91fba2850b5b10", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/e9/ae/1d674d0c086eaa0bd1c3b1db0505", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/d7/de/c432c06ba1271f59656ed56165f9", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/fc/ad/a45526ccfa8945247b3a29c2c251", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/92/43/36b34307575f6d6219bdf4898e18", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/61/03/89070ca765e06da3a419a579f503", "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/aa/ed/4bd02af3cffbd4c9c4be532fb1fe", @@ -442,7 +442,7 @@ "assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/dd/be/1ae65f073d563e69c0c5246d20d7", "assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/32/97/4c61425d7c200a5c4c9ae3a94a0e", "assets/build/ba_data/data/languages/malay.json": "https://files.ballistica.net/cache/ba1/b4/02/f686ce008312e74d5953a511c8b2", - "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/c9/a8/e42e6a818ec3894fa2f8b2c50995", + "assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/81/c8/269052d2d21ba6971f3a151813b9", "assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/38/31/fd930431c7612d0ab0e73e6bc74f", "assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/cb/96/86bb139f20e126593f7fdba9e9e1", "assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/d7/06/9d70642d0a4d1e3b1c2149d7a17c", @@ -4008,50 +4008,50 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/1c/77/ac670a5118abdf8a7687af0e159b", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c5/08/f608b52f5d884782374aa6578ed3", - "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/cb/cc/b74d5615a34e41f2dea0a6788a95", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d2/b3/8a50c3dbfba9adbda587b6eed182", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/49/359da0ec2144ae8b67ca245fa6fd", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/14/06/b0a2ab347e8b4b4efe6536049c4a", - "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/04/2c/7813a927c280305cfe6aa56dfd99", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/82/ab/c3d7d1dc70b375c6e2680a9bd7b2", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1c/46/3ac0c7f5d50d5f6a266b72966bbf", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/30/89/495396eabe450fae4f1e8b0d76db", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/f1/7b/8abca0c95379e4ab0692fa3f994f", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/2a/7f/129d1ef21820f132eab259a979ea", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0c/56/2a9a92ea5e3a16ca39f1fc04546b", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/73/1a/cde9e42797701b0746866b3092dd", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/57/6c/76fa56be35a356fa1c119ade0f75", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3b/86/c9e0277d66af31d3458b80c2b3fb", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/50/a4c6df16326044ce3f42e16289de", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c5/4e/fb70411c80715607bba9ccf2891c", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/b9/3f/058f1adab37f36571d031265b817", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/3f/f7/7e1d600a05c160e106baa26ca54c", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/81/de/69347df0599cafe827bfeb3a3de2", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e9/02/eb6c1b076dd366fcdbb69c0aa85a", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ff/2b/5e85ad35d9305d60adbdc53dbb6e", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5b/fb/074697e51ab8a28604788be2b3bb", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0b/26/7a9c1094bb1ffea16a60424251e1", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fb/89/55c61946fc5cfa6e1154450b84e8", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b9/33/7d35c3ff242b7ad72257b9a132ec", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9c/5e/de343f0a5b9ada35352ba10f5598", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a7/da/be3ad1176399531ce6e634f8700f", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/83/2e/f5710315b4a86e6dd2a3806f0b9a", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bd/15/c896646cdff25290761c402d3b21", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/f1/e9cafcb4a0b721a48027763e6b50", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b7/ec/0ad3db1b805b6d3067893326e8d8", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c3/88/22c1bff0c944447bf15cadb835a8", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/62/fc/bbf70a63d29d536d8511474309c6", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/c1/ed8083e560d9466547d1da458118", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/10/8a/534c2c99f6d314631046f0f2afc2", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/77/5a/df7c807d080a812fd101c6862d0b", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/5a/b8/65c65a447c27054bc26b89e959de", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/43/22/ad29dfbcc3a429d7e53858a38fb2", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ac/8e/75d6b1c36166b2a8ecfcb1c277c9", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/18/49/a7508bebb7fb064b6f435e8571d4", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/54/61/8a95f051146f900b5eb5a6f7ee27", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/61/4f/3c28e119c49318e76f5bb072e760", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/2c/5e/e906f2d566fd87363e83013c64b6", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/f0/de/a15c858f7de30960bf9bb0c62d0b", + "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b2/21/fb3cc75f193b360fe01f192336c1", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b5/e9/e65c9052619c2c1990462380cc54", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/02/ec/1652214167d27a6279cf1f525f47", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/6d/91/bcc179b4205353a17172ece5939d", + "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/56/83/8bdc611e72d8e681870176224bc3", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/82/ca/95b08abd3b0eeff5435979fc32b1", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a6/33/67de7924fb59f8ae7e957d592a27", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c6/ad/455d442d23c6e6699e578282dce8", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d3/22/2e615a946352c67889dc4c0c5597", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b7/c2/e29df979de73a7ca415735c34fc3", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b2/24/43451b637f3f188e2913a02982d8", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/42/04/e1dc1a340a3ba859b9c417f330cd", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/7e/fe/70345e5263a0d456378e7a0e8661", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a4/7f/7ad86eabef054f316814cbbd26ec", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1e/cb/f003d8de353f71d08e81d82f6292", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/36/62/d86b02165ee596f2767ae24b505a", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/d6/73/37a2acd3bcd45cb8a48e4a80d547", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/57/62/ec832ceda26e7e7a07e4277a6d97", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/fd/88/724ff3645eb22af1f7755982af7b", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e4/1b/a2ab5dd8c59cd90f5cd28f451884", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a5/48/1e25219edd0a78e40c0f3093396d", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/dd/5d/51313d43cafea4898cc2ca7aaf3d", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b3/ca/9a7f4019bf2e57d668171c42c876", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4e/c8/478035d9e79dabc2a0cff7dc5c07", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/e3/5cac56d9f4e96a800cd424ecb01a", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/2d/f2/f3afa4635c55863e2996ee110414", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/52/2e/3fef9d99b533a1ae5e1be3c63e21", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/17/d4/3578de762544210f09f9ef6b60a4", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/18/44/f6a99fe7cf886f8a1b77b1878c7a", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/84/3a/a7f7d3b3ee3bd7b1806bf77f2859", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e9/58/63afc99ce47eed08527f2dfc8f4d", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/43/ed/f49af3eb3646c69c5312ef8000dc", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e4/c5/091b0d55220c1c7a6939e00563d7", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b3/f4/69436953e88c28d027b7c8004ba3", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/37/d3/599f3904f5ee987d540164237703", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/5b/0e/a571f0b1d167f3a0d3f07ff6e633", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/86/3e/abdb5280c7e24e145bcf4cfc73d4", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/15/b7/76299570cd56fac624ec810c575c", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/39/07/b32bb5e8a4458adc0df92dad82f6", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/28/46/700cc357d8c776c3a34dbdeb31c8", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/71/f0/d3d64e44f03a10536649e000c836", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/42/9a/961f50a8d8d7b1d704a2616d76ca", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/4a/da/85bb42cb764293be0b4c515268ad", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/23/ce/68396b1b7ec6d2f8425902148140", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/2d/4f/f4fe67827f36cd59cd5193333a02", "src/ballistica/generated/python_embedded/bootstrap_monolithic.inc": "https://files.ballistica.net/cache/ba1/ef/c1/aa5f1aa10af89f5c0b1e616355fd" diff --git a/tools/efro/log.py b/tools/efro/log.py index 99e5e2ab..752922ed 100644 --- a/tools/efro/log.py +++ b/tools/efro/log.py @@ -149,6 +149,8 @@ class LogHandler(logging.Handler): self._printed_callback_error = False self._thread_bootstrapped = False self._thread = Thread(target=self._log_thread_main, daemon=True) + if __debug__: + self._last_slow_emit_warning_time: float | None = None self._thread.start() # Spin until our thread is up and running; otherwise we could @@ -238,6 +240,9 @@ class LogHandler(logging.Handler): ) def emit(self, record: logging.LogRecord) -> None: + if __debug__: + starttime = time.monotonic() + # Called by logging to send us records. # We simply package them up and ship them to our thread. # UPDATE: turns out we CAN get log messages from this thread @@ -282,6 +287,31 @@ class LogHandler(logging.Handler): ) ) + if __debug__: + # Make noise if we're taking a significant amount of time here. + # Limit the noise to once every so often though; otherwise we + # could get a feedback loop where every log emit results in a + # warning log which results in another, etc. + now = time.monotonic() + # noinspection PyUnboundLocalVariable + duration = now - starttime + if duration > 0.05 and ( + self._last_slow_emit_warning_time is None + or now > self._last_slow_emit_warning_time + 10.0 + ): + # Logging calls from *within* a logging handler + # sounds sketchy, so let's just kick this over to + # the bg event loop thread we've already got. + self._last_slow_emit_warning_time = now + self._event_loop.call_soon_threadsafe( + tpartial( + logging.warning, + 'efro.log.LogHandler emit took too long' + ' (%.2f seconds).', + duration, + ) + ) + def _emit_in_thread( self, name: str, levelno: int, created: float, message: str ) -> None: diff --git a/tools/efro/message/_receiver.py b/tools/efro/message/_receiver.py index 7881b82e..cc35423f 100644 --- a/tools/efro/message/_receiver.py +++ b/tools/efro/message/_receiver.py @@ -355,6 +355,7 @@ class MessageReceiver: """ assert self.is_async, "can't call async handler on sync receiver" msg_decoded: Message | None = None + msgtype: type[Message] | None = None try: msg_decoded = await self._decode_incoming_message_async( bound_obj, msg @@ -376,7 +377,14 @@ class MessageReceiver: bound_obj, msg_decoded, exc ) if dolog: - logging.exception('Error in efro.message handling.') + if msgtype is not None: + logging.exception( + 'Error handling %s.%s message.', + msgtype.__module__, + msgtype.__qualname__, + ) + else: + logging.exception('Error in efro.message handling.') return rstr diff --git a/tools/efro/message/_sender.py b/tools/efro/message/_sender.py index ee439e01..8d71d584 100644 --- a/tools/efro/message/_sender.py +++ b/tools/efro/message/_sender.py @@ -44,6 +44,9 @@ class MessageSender: self._send_async_raw_message_call: Callable[ [Any, str], Awaitable[str] ] | None = None + self._send_async_raw_message_ex_call: Callable[ + [Any, str, Message], Awaitable[str] + ] | None = None self._encode_filter_call: Callable[ [Any, Message, dict], None ] | None = None @@ -80,6 +83,18 @@ class MessageSender: self._send_async_raw_message_call = call return call + def send_async_ex_method( + self, call: Callable[[Any, str, Message], Awaitable[str]] + ) -> Callable[[Any, str, Message], Awaitable[str]]: + """Function decorator for extended send-async method. + + This version of the method also is passed the original unencoded + message. + """ + assert self._send_async_raw_message_ex_call is None + self._send_async_raw_message_ex_call = call + return call + def encode_filter_method( self, call: Callable[[Any, Message, dict], None] ) -> Callable[[Any, Message, dict], None]: @@ -184,14 +199,23 @@ class MessageSender: to happen in different contexts/threads. """ - if self._send_async_raw_message_call is None: + if ( + self._send_async_raw_message_call is None + and self._send_async_raw_message_ex_call is None + ): raise RuntimeError('send_async() is unimplemented for this type.') msg_encoded = self._encode_message(bound_obj, message) try: - response_encoded = await self._send_async_raw_message_call( - bound_obj, msg_encoded - ) + if self._send_async_raw_message_ex_call is not None: + response_encoded = await self._send_async_raw_message_ex_call( + bound_obj, msg_encoded, message + ) + else: + assert self._send_async_raw_message_call is not None + response_encoded = await self._send_async_raw_message_call( + bound_obj, msg_encoded + ) except Exception as exc: response = ErrorSysResponse( error_message='Error in MessageSender @send_async_method.',