Пример #1
0
        private void ParseClientReadyPacket(Packet packet, NetworkConnection clientConnection)
        {
            ServerStage.ClientInitializationUpdate(clientConnection);

            NetworkEventPayload.ServerClientReadyPayload payload = new NetworkEventPayload.ServerClientReadyPayload();
            ServerStage.EnqueueNetworkEvent(ServerStage.EVENT_CLIENTREADY, clientConnection, payload);
        }
Пример #2
0
        private void ParseClientDisconnectPacket(Packet packet, NetworkConnection clientConnection)
        {
            ServerStage.EnqueueNetworkEvent(ServerStage.EVENT_CLIENTDISCONNECTED, clientConnection, new NetworkEventPayload.ServerClientDisconnectPayload());

            for (int i = 0; i < clientConnections.Length; i++)
            {
                if (clientConnections[i] == clientConnection)
                {
                    objectsManager.pendingMessagesOutboundTargeted.Remove(clientConnections[i]);
                    objectsManager.pendingMessagesOutboundTargetedHP.Remove(clientConnections[i]);

                    clientConnections[i] = null;
                    break;
                }
            }
        }
Пример #3
0
        private void ParseChallengeResponsePacket(Packet packet, NetworkConnection clientConnection)
        {
            PacketChallengeResponse response = (PacketChallengeResponse)packet;

            if (Array.IndexOf(clientConnections, clientConnection) > -1)
            {
                return;
            }

            if (!pendingConnections.Contains(clientConnection))
            {
                return;
            }

            AddConnectionToSlot(clientConnection, GetEmptyServerSlotIndex());

            SendConnectionConfirmation(clientConnection);

            NetworkEventPayload.ServerClientConnectPayload payload = CreateConnectedEventFromChallengeResponse(response);
            ServerStage.EnqueueNetworkEvent(ServerStage.EVENT_CLIENTCONNECTED, clientConnection, payload);
        }
Пример #4
0
        private void CheckTimeoutConnections()
        {
            for (int i = 0; i < clientConnections.Length; i++)
            {
                if (clientConnections[i] == null)
                {
                    continue;
                }

                if ((DateTime.Now - clientConnections[i].timestamp).Seconds > TIMEOUT_SEC)
                {
                    NetworkEventPayload.ServerClientDisconnectPayload payload = new NetworkEventPayload.ServerClientDisconnectPayload();

                    ServerStage.EnqueueNetworkEvent(ServerStage.EVENT_CLIENTDISCONNECTED, clientConnections[i], payload);

                    objectsManager.pendingMessagesOutboundTargeted.Remove(clientConnections[i]);
                    objectsManager.pendingMessagesOutboundTargetedHP.Remove(clientConnections[i]);
                    clientConnections[i] = null;

                    sentPacketRecorder.ClearPacketsForConnection(clientConnections[i]);
                }
            }
        }