/// <inheritdoc /> //protected override void OnSocketError(SocketError socketError) //{ // this._logger.LogError($"An error occured on Cluster core client: {socketError}"); //} /// <inheritdoc /> public override void HandleMessage(INetPacketStream packet) { uint packetHeaderNumber = 0; if (Socket == null) { _logger.LogError("Skip to handle core packet from server. Reason: socket is not connected."); return; } try { packetHeaderNumber = packet.Read <uint>(); _handlerInvoker.Invoke((CorePacketType)packetHeaderNumber, this, packet); } catch (ArgumentNullException) { if (Enum.IsDefined(typeof(CorePacketType), packetHeaderNumber)) { _logger.LogWarning("Received an unimplemented Core packet {0} (0x{1}) from {2}.", Enum.GetName(typeof(CorePacketType), packetHeaderNumber), packetHeaderNumber.ToString("X4"), Socket.RemoteEndPoint); } else { _logger.LogWarning("[SECURITY] Received an unknown Core packet 0x{0} from {1}.", packetHeaderNumber.ToString("X4"), Socket.RemoteEndPoint); } } catch (Exception exception) { _logger.LogError(exception, $"An error occured while handling a core packet."); _logger.LogDebug(exception.InnerException?.StackTrace); } }
public void OnSnapshot(IWorldClient client, INetPacketStream packet) { var snapshotCount = packet.Read <byte>(); while (snapshotCount > 0) { var snapshotHeaderNumber = packet.Read <short>(); try { var snapshotHeader = (SnapshotType)snapshotHeaderNumber; _handlerInvoker.Invoke(snapshotHeader, client, packet); } catch (ArgumentNullException) { if (Enum.IsDefined(typeof(SnapshotType), snapshotHeaderNumber)) { _logger.LogWarning("Received an unimplemented World snapshot {0} (0x{1}) from {2}.", Enum.GetName(typeof(SnapshotType), snapshotHeaderNumber), snapshotHeaderNumber.ToString("X4"), client.Socket.RemoteEndPoint); } else { _logger.LogWarning("[SECURITY] Received an unknown World snapshot 0x{0} from {1}.", snapshotHeaderNumber.ToString("X4"), client.Socket.RemoteEndPoint); } } catch (Exception exception) { _logger.LogError(exception, $"An error occured while handling a world snapshot."); _logger.LogDebug(exception.InnerException?.StackTrace); } snapshotCount--; } }
/// <summary> /// Invokes the included invoker if it is not garbage collected. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The instance containing the event data.</param> public void Invoke(object sender, TEventArgs e) { // copy to local variable to prevent race condition var target = _weaklyReferencedTarget.Target; if (target != null) { _invoker.Invoke(target, sender, e); } }
/// <summary> /// Handle the incoming mesages. /// </summary> /// <param name="packet">Incoming packet</param> public override void HandleMessage(INetPacketStream packet) { uint packetHeaderNumber = 0; if (Socket == null) { _logger.LogTrace("Skip to handle cluster packet from null socket. Reason: client is not connected."); return; } try { packet.Read <uint>(); // DPID: Always 0xFFFFFFFF (uint.MaxValue) packetHeaderNumber = packet.Read <uint>(); #if DEBUG _logger.LogTrace("Received {0} packet from {1}.", (PacketType)packetHeaderNumber, Socket.RemoteEndPoint); #endif _handlerInvoker.Invoke((PacketType)packetHeaderNumber, this, packet); } catch (ArgumentNullException) { if (Enum.IsDefined(typeof(PacketType), packetHeaderNumber)) { _logger.LogWarning("Received an unimplemented Cluster packet {0} (0x{1}) from {2}.", Enum.GetName(typeof(PacketType), packetHeaderNumber), packetHeaderNumber.ToString("X4"), Socket.RemoteEndPoint); } else { _logger.LogWarning("[SECURITY] Received an unknown Cluster packet 0x{0} from {1}.", packetHeaderNumber.ToString("X4"), Socket.RemoteEndPoint); } } catch (Exception exception) { _logger.LogError(exception, $"An error occured while handling a cluster packet."); _logger.LogDebug(exception.InnerException?.StackTrace); } }
/// <inheritdoc /> protected override void OnClientDisconnected(CoreServerClient connection) { _handlerInvoker.Invoke(CorePacketType.Disconnect, connection); }
private async Task OnMessageReceived(BasicMessage channelMessage) { await invoker.Invoke(channelMessage); }