コード例 #1
0
ファイル: ClusterCoreClient.cs プロジェクト: zero16832/Rhisis
        /// <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);
            }
        }
コード例 #2
0
ファイル: SnapshotHandler.cs プロジェクト: zero16832/Rhisis
        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--;
            }
        }
コード例 #3
0
            /// <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);
                }
            }
コード例 #4
0
ファイル: ClusterClient.cs プロジェクト: zero16832/Rhisis
        /// <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);
            }
        }
コード例 #5
0
 /// <inheritdoc />
 protected override void OnClientDisconnected(CoreServerClient connection)
 {
     _handlerInvoker.Invoke(CorePacketType.Disconnect, connection);
 }
コード例 #6
0
 private async Task OnMessageReceived(BasicMessage channelMessage)
 {
     await invoker.Invoke(channelMessage);
 }