Exemple #1
0
        private static Monster ReadMonster(PacketDeserializer deserializer, int length = 0)
        {
            return(null);

            /*
             * var species = reader.Read<short>();
             * var secretID = reader.Read<ushort>();
             * var personalityValue = reader.Read<uint>();
             * var nature = reader.Read<byte>();
             *
             * return new Monster(species, secretID, personalityValue, nature)
             * {
             *  CatchInfo = reader.Read<CatchInfo>(),
             *  Experience = reader.Read<int>(),
             *  EggSteps = reader.Read<int>(),
             *  IV = reader.Read<Stats>(),
             *  EV = reader.Read<Stats>(),
             *  CurrentHP = reader.Read<short>(),
             *  StatusEffect = reader.Read<short>(),
             *  Affection = reader.Read<byte>(),
             *  Friendship = reader.Read<byte>(),
             *  Moves = reader.Read<Moves>(),
             *  HeldItem = reader.Read<short>(),
             * };
             */
        }
Exemple #2
0
 private static TileSetResponse ReadTileSetResponse(PacketDeserializer deserializer, int length = 0)
 {
     return(new TileSetResponse()
     {
         Name = deserializer.Read <string>(), TileSetData = deserializer.Read <string>()
     });
 }
Exemple #3
0
        protected NetworkerServerBase(ServerConfiguration configuration,
                                      INetworkerLogger logger,
                                      IList <INetworkerPacketHandlerModule> modules,
                                      IContainerIoc container)
        {
            this.configuration           = configuration;
            this.Logger                  = logger;
            this.container               = container;
            this.Connections             = new List <TcpConnection>();
            this.packetSerializer        = new PacketSerializer();
            this.packetDeserializer      = new PacketDeserializer();
            this.packetHandlers          = new Dictionary <string, Type>();
            this.packetHandlerSingletons = new Dictionary <string, IServerPacketHandler>();

            foreach (var module in modules)
            {
                this.RegisterTypesFromModule(module);
            }

            this.container.RegisterSingleton <ITcpConnectionsProvider>(
                new TcpConnectionsProvider(this.Connections));
            this.container.RegisterSingleton(logger);

            this.RegisterPacketHandler <PingRequestPacket, PingRequestPacketHandler>();
        }
    public void OnPreReceiveData(SocketClient socketClient, byte[] Buffer)
    {
        BasePacket basePacket = (BasePacket)PacketDeserializer.Deserialize(Buffer, PacketHeaderSize.HeaderSize);

        if (basePacket.packetType == PacketType.ConnectionStat)
        {
            ConnectionPacket connectionpacket = (ConnectionPacket)basePacket;
            if (socketServer.clientsManager.SocketClients.ContainsKey(connectionpacket.ClientId))
            {
                socketClient.SendPacket(new ConnectionPacket(false, 0, false, true));
                socketClient.Dispose();
                IGConsole.Instance.println("Same Client Already Connected");
            }
            else
            {
                socketServer.clientsManager.UpdatePreClient(connectionpacket.ClientId, connectionpacket.IsBot, socketClient);
                if (connectionpacket.IsBot)
                {
                    clientsManagerObj.clientsManager.AddClient(new HardwareClient(connectionpacket.ClientId, socketClient));
                }
                else
                {
                    clientsManagerObj.clientsManager.AddClient(new ConsoleClient(connectionpacket.ClientId, socketClient, clientsManagerObj.clientsManager.Clients));
                }
                socketClient.SendPacket(new ConnectionPacket(true, 0, false));
                IGConsole.Instance.println("Client Connected    ID(" + connectionpacket.ClientId + ") ISBOT(" + connectionpacket.IsBot + ")");
            }
        }
        else
        {
            IGConsole.Instance.println("Client Reset has Problem");
        }
    }
Exemple #5
0
 private static ImageResponse ReadImageResponse(PacketDeserializer deserializer, int length = 0)
 {
     return(new ImageResponse()
     {
         Name = deserializer.Read <string>(), ImageData = deserializer.Read <byte[]>()
     });
 }
Exemple #6
0
 private static FileHash ReadFileHash(PacketDeserializer deserializer, int length = 0)
 {
     return(new FileHash()
     {
         Name = deserializer.Read <string>(), Hash = deserializer.Read <string>()
     });
 }
Exemple #7
0
        private Task DispatchLoginPackets(UncompressedPacket packet)
        {
            var  br = new SpanReader(packet.Data);
            Task task;

            switch (packet.PacketId)
            {
            // Login Start
            case 0x00:
                task = DispatchPacket(PacketDeserializer.Deserialize <LoginStart>(ref br));
                break;

            // Encryption Response
            case 0x01:
                task = DispatchPacket(PacketDeserializer.Deserialize <EncryptionResponse>(ref br));
                break;

            default:
                throw new InvalidDataException($"Unrecognizable packet id: 0x{packet.PacketId:X2}.");
            }

            if (!br.IsCosumed)
            {
                throw new InvalidDataException($"Packet data is not fully consumed.");
            }
            return(task);
        }
Exemple #8
0
        public PacketLogEntry(SerializationInfo info, StreamingContext context)
        {
            this.UnityTime = info.GetSingle("UnityTime");
            this.In        = info.GetBoolean("In");
            this.Client    = info.GetBoolean("Client");

            byte[] packetData = info.GetValue("Packet", typeof(byte[])) as byte[];
            this.Packet = PacketDeserializer.DeserializePacket(new PacketReader(packetData));
        }
        private void OnReceive(object sender, ReceiveData data)
        {
            var buffer = data.Packet.Payload;

            OnDataReceived(new SocketDataReceived
            {
                Packet = PacketDeserializer.Deserialize(buffer, 0, buffer.Length),
                Time   = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
            });
        }
Exemple #10
0
 private static Stats ReadStats(PacketDeserializer deserializer, int length = 0)
 {
     return(new Stats(
                deserializer.Read <short>(),
                deserializer.Read <short>(),
                deserializer.Read <short>(),
                deserializer.Read <short>(),
                deserializer.Read <short>(),
                deserializer.Read <short>()));
 }
Exemple #11
0
        private void OnMessage(object sender, MessageEventArgs message)
        {
            if (!message.IsText)
            {
                return;
            }

            OnDataReceived(new SocketDataReceived
            {
                Packet = PacketDeserializer.Deserialize(message.Data, Key, Type == GSLiveType.Command)
            });
        }
        private async Task Receiving()
        {
            DebugUtil.LogNormal <GsTcpClient>(
                Type == GSLiveType.TurnBased ? DebugLocation.TurnBased : DebugLocation.Command, "Receiving",
                "GsTcpClient -> Start Receiving...");

            while (IsConnected())
            {
                try
                {
                    BufferReceivedBytes += await _clientStream.ReadAsync(Buffer, BufferOffset,
                                                                         Buffer.Length - BufferOffset, OperationCancellationToken.Token);

                    if (!IsConnected())
                    {
                        break;
                    }

                    DataBuilder.Append(Encoding.UTF8.GetString(Buffer, BufferOffset, BufferReceivedBytes));
                    var packets = PacketValidator.ValidateDataAndReturn(DataBuilder);

                    foreach (var packet in packets)
                    {
                        OnDataReceived(new SocketDataReceived
                        {
                            Packet = PacketDeserializer.Deserialize(packet, Key, Type == GSLiveType.Command)
                        });
                    }

                    BufferReceivedBytes = 0;
                }
                catch (Exception e)
                {
                    if (!(e is OperationCanceledException || e is ObjectDisposedException ||
                          e is ArgumentOutOfRangeException))
                    {
                        e.LogException <GsTcpClient>(
                            Type == GSLiveType.TurnBased ? DebugLocation.TurnBased : DebugLocation.Command,
                            "Receiving");

                        OnClosed(new ErrorArg {
                            Error = e.ToString()
                        });
                    }

                    break;
                }
            }

            DebugUtil.LogNormal <GsTcpClient>(
                Type == GSLiveType.TurnBased ? DebugLocation.TurnBased : DebugLocation.Command, "Receiving",
                "GsTcpClient -> Receiving Done!");
        }
Exemple #13
0
        protected byte GetByteVariable()
        {
            var index = _variableIndexes[_currentGetterIndex];
            var value = PacketDeserializer.DeserializeByte(Data, index);

            _currentGetterIndex++;
#if VOXCAKE_NET_DEBUG
            HandleOutOfVariablesException();
#endif

            return(value);
        }
Exemple #14
0
 private static CatchInfo ReadCatchInfo(PacketDeserializer deserializer, int length = 0)
 {
     return(new CatchInfo
     {
         Method = deserializer.Read <string>(),
         Location = deserializer.Read <string>(),
         TrainerName = deserializer.Read <string>(),
         TrainerID = deserializer.Read <ushort>(),
         PokeballID = deserializer.Read <byte>(),
         Nickname = deserializer.Read <string>()
     });
 }
Exemple #15
0
        public void AddSegment(byte[] segment, int offset)
        {
            segments.Write(segment, offset, segment.Length - offset);
            AddCount++;

            if (AddCount == SegmentCount)
            {
                BasePacket basePacket = (BasePacket)PacketDeserializer.Deserialize(segments);
                OnDataInvoke?.Invoke(basePacket, SegmentID);
                segments.Close();
                segments.Dispose();
                segments = null;
            }
        }
        private Task DispatchHandshakingPackets(UncompressedPacket packet)
        {
            var br = new SpanReader(packet.Data);

            switch (packet.PacketId)
            {
            // Handshake
            case 0x00:
                return(DispatchPacket(PacketDeserializer.Deserialize <Handshake>(ref br)));

            default:
                throw new InvalidDataException($"Unrecognizable packet id: 0x{packet.PacketId:X2}.");
            }
        }
Exemple #17
0
        private static TileSetResponse[] ReadTileSetResponseArray(PacketDeserializer deserializer, int length = 0)
        {
            if (length == 0)
            {
                length = deserializer.Read <VarInt>();
            }

            var array = new TileSetResponse[length];

            for (var i = 0; i < length; i++)
            {
                array[i] = ReadTileSetResponse(deserializer);
            }

            return(array);
        }
Exemple #18
0
        private static FileHash[] ReadFileHashArray(PacketDeserializer deserializer, int length = 0)
        {
            if (length == 0)
            {
                length = deserializer.Read <VarInt>();
            }

            var array = new FileHash[length];

            for (var i = 0; i < length; i++)
            {
                array[i] = ReadFileHash(deserializer);
            }

            return(array);
        }
        protected NetworkerClientBase(ClientConfiguration clientConfiguration,
                                      INetworkerLogger logger,
                                      IList <INetworkerPacketHandlerModule> packetHandlerModules)
        {
            this.clientConfiguration = clientConfiguration;
            this.logger             = logger;
            this.Container          = new ServiceCollectionContainer(new ServiceCollection());
            this.packetDeserializer = new PacketDeserializer();
            this.Container.RegisterSingleton(logger);
            this.packetHandlers      = new Dictionary <string, Type>();
            this.clientResponseStore = new ClientResponseStore();

            foreach (var packetHandlerModule in packetHandlerModules)
            {
                this.RegisterTypesFromModule(packetHandlerModule);
            }
        }
        private Task DispatchStatusPackets(UncompressedPacket packet)
        {
            var br = new SpanReader(packet.Data);

            switch (packet.PacketId)
            {
            // Request
            case 0x00:
                return(DispatchPacket(PacketDeserializer.Deserialize <Request>(ref br)));

            // Ping
            case 0x01:
                return(DispatchPacket(PacketDeserializer.Deserialize <Ping>(ref br)));

            default:
                throw new InvalidDataException($"Unrecognizable packet id: 0x{packet.PacketId:X2}.");
            }
        }
Exemple #21
0
        public void AddSegment(byte[] segment)
        {
            HeaderInfo headerInfo = PacketDeserializer.ParseHeader(segment);

            if (headerInfo.CourrentSegmentID >= 1000)
            {
                if (segmentCollecters.Count > 0)
                {
                    segmentCollecters.Clear();
                }

                if (LastCollecter == null)
                {
                    LastCollecter = new SegmentCollecter(headerInfo.SegmentCount, headerInfo.CourrentSegmentID);
                    LastCollecter.OnDataInvoke += PacketReciver_OnDataInvoke;
                }
                LastCollecter.AddSegment(segment, PacketHeaderSize.HeaderSize);
                return;
            }

            if (headerInfo.CourrentSegmentID == 1)
            {
                LastCollecter = null;
            }

            if (segmentCollecters.ContainsKey(headerInfo.CourrentSegmentID))
            {
                segmentCollecters[headerInfo.CourrentSegmentID].AddSegment(segment, PacketHeaderSize.HeaderSize);
            }
            else
            {
                SegmentCollecter segmentCollecter = new SegmentCollecter(headerInfo.SegmentCount, headerInfo.CourrentSegmentID);
                segmentCollecter.OnDataInvoke += PacketReciver_OnDataInvoke;

                segmentCollecter.AddSegment(segment, PacketHeaderSize.HeaderSize);
                segmentCollecters.Add(headerInfo.CourrentSegmentID, segmentCollecter);
            }
        }
        public int ReadStream()
        {
            if (TcpClient.Connected)
            {
                if (0 < TcpClient.Available)
                {
                    ReadNetworkStreamToReadBuffer(0, PacketHeaderSize.HeaderSize);
                    HeaderInfo headerInfo = PacketDeserializer.ParseHeader(ReadBuffer);
                    ReadNetworkStreamToReadBuffer(PacketHeaderSize.HeaderSize, headerInfo.SegmentLength);

                    return(PacketHeaderSize.HeaderSize + headerInfo.SegmentLength);
                }
                else
                {
                    return(-2);
                }
            }
            else
            {
                Dispose();
                return(-1);
            }
        }
Exemple #23
0
        private void InitSocket()
        {
            while (!StopTask)
            {
                if (tcpClient.Connected)
                {
                    if (0 < tcpClient.Available)
                    {
                        ReadNetworkStreamToReadBuffer(0, PacketHeaderSize.HeaderSize);
                        HeaderInfo headerInfo = PacketDeserializer.ParseHeader(ReadBuffer);
                        ReadNetworkStreamToReadBuffer(PacketHeaderSize.HeaderSize, headerInfo.SegmentLength);

                        OnReceiveData(ReadBuffer, PacketHeaderSize.HeaderSize + headerInfo.SegmentLength);
                    }
                }
                else
                {
                    StopTask = true;
                }
            }
            tcpClient.Close();
            networkStream.Close();
            networkStream.Dispose();
        }
Exemple #24
0
 public InputPacketBinding(byte id, Type packet, PacketDeserializer deserializer) : base(id, packet)
 {
     Deserializer = deserializer;
 }
Exemple #25
0
        public void Connect(IPEndPoint endPoint)
        {
            DisconnectReason = null;

            NetPeerConfiguration config = new NetPeerConfiguration("MulTUNG");

            Client = new NetClient(config);
            Client.Start();

            var approval = Client.CreateMessage();

            approval.Write(MulTUNG.Version.ToString());
            approval.Write(Username);

            var conn = Client.Connect(endPoint, approval);

            ThreadPool.QueueUserWorkItem(o =>
            {
                var c       = o as NetConnection;
                int elapsed = 0;

                while (true)
                {
                    Thread.Sleep(50);
                    elapsed += 50;

                    if ((c.Status != NetConnectionStatus.Connected && elapsed >= Constants.WaitForConnection) || DisconnectReason != null)
                    {
                        Network.IsClient = false;

                        string status = MulTUNG.Status = "Couldn't connect to remote server." + (DisconnectReason != null ? " Check the console for more details." : "");

                        IGConsole.Error("Couldn't connect to remote server: " + DisconnectReason);

                        Thread.Sleep(3000);

                        MulTUNG.ShowMainMenuCanvases();
                        MulTUNG.ShowStatusWindow = false;
                        MulTUNG.Status           = "";

                        break;
                    }
                    else if (c.Status == NetConnectionStatus.Connected)
                    {
                        Network.IsClient = true;

                        MulTUNG.SynchronizationContext.Send(_ =>
                        {
                            SaveManager.SaveName = MulTUNG.ForbiddenSaveName;
                            World.DeleteSave();

                            SceneManager.LoadScene("gameplay");
                            EverythingHider.HideEverything();
                        }, null);

                        while (ModUtilities.IsOnMainMenu)
                        {
                            Thread.Sleep(500);
                        }

                        Thread.Sleep(1000);

                        IsInGameplay = true;
                        EnterEvent.Set();

                        InitWorld();

                        break;
                    }
                }
            }, conn);

            ThreadPool.QueueUserWorkItem(_ =>
            {
                NetIncomingMessage msg;

                while (Client.Status == NetPeerStatus.Running)
                {
                    msg = Client.WaitMessage(int.MaxValue);

                    if (msg == null)
                    {
                        continue;
                    }

                    switch (msg.MessageType)
                    {
                    case NetIncomingMessageType.Data:
                        var packet = PacketDeserializer.DeserializePacket(new MessagePacketReader(msg));

                        if (Network.ProcessPacket(packet, this.PlayerID))
                        {
                            PacketLog.LogReceive(packet);
                        }

                        break;

                    case NetIncomingMessageType.StatusChanged:
                        var status = (NetConnectionStatus)msg.ReadByte();
                        Log.WriteLine("Status: " + status);

                        if (status == NetConnectionStatus.Disconnected)
                        {
                            string reason = msg.ReadString();

                            if (!string.IsNullOrEmpty(reason))
                            {
                                DisconnectReason = reason;
                            }

                            Disconnect();
                        }

                        LastStatus = Client.ConnectionStatus;
                        break;
                    }

                    Client.Recycle(msg);
                }
            });
        }
Exemple #26
0
 private static Attack ReadAttack(PacketDeserializer deserializer, int length = 0)
 {
     return(new Attack(deserializer.Read <short>(), deserializer.Read <byte>(), deserializer.Read <byte>()));
 }
Exemple #27
0
        private void HandleMessage(NetIncomingMessage msg)
        {
            switch (msg.MessageType)
            {
            case NetIncomingMessageType.ConnectionApproval:
                string  verStr = msg.ReadString();
                Version ver    = new Version(verStr);

                if (ver == MulTUNG.MulTUNG.Version)
                {
                    msg.SenderConnection.Approve();

                    string username = msg.ReadString().Trim();

                    if (!Players.Any(o => o.Value.Username.Equals(username)))
                    {
                        IGConsole.Log($"{username.Length} {MaxUsernameLength}");
                        if (username.Length < MaxUsernameLength)
                        {
                            msg.SenderConnection.Approve();
                        }
                        else
                        {
                            msg.SenderConnection.Deny($"your username must be shorter than {MaxUsernameLength} characters.");
                        }
                    }
                    else
                    {
                        msg.SenderConnection.Deny("someone is already using that username.");
                    }
                }
                else
                {
                    msg.SenderConnection.Deny($"wrong MulTUNG version, server has v{MulTUNG.MulTUNG.Version}.");
                }

                break;

            case NetIncomingMessageType.Data:
                var packet = PacketDeserializer.DeserializePacket(new MessagePacketReader(msg));

                if (packet.SenderID == Network.ServerPlayerID)
                {
                    break;
                }

                PacketLog.LogReceive(packet);

                if (packet.ShouldBroadcast)
                {
                    Broadcast(packet, packet.ReliableBroadcast ? NetDeliveryMethod.ReliableOrdered : NetDeliveryMethod.UnreliableSequenced);
                }
                else
                {
                    Network.ProcessPacket(packet, Network.ServerPlayerID);
                }

                break;

            case NetIncomingMessageType.StatusChanged:
                var status = (NetConnectionStatus)msg.ReadByte();

                if (status == NetConnectionStatus.Connected)
                {
                    int id = PlayerIdCounter++;

                    msg.SenderConnection.SendMessage(new PlayerWelcomePacket
                    {
                        YourID         = id,
                        ServerUsername = Network.Username,
                        Players        = Players.Select(o => new Tuple <int, string>(o.Key, o.Value.Username)).ToList()
                    }.GetMessage(Server), NetDeliveryMethod.ReliableOrdered, 0);

                    var player = new Player(id, msg.SenderConnection);

                    Log.WriteLine("Connected player " + player.ID);

                    Players.Add(id, player);
                }
                else if (status == NetConnectionStatus.Disconnected)
                {
                    var player = Players.SingleOrDefault(o => o.Value.Connection == msg.SenderConnection);

                    Players.Remove(player.Key);
                    PlayerManager.WaveGoodbye(player.Key);
                }

                break;
            }
        }
Exemple #28
0
 private static MonsterTeam ReadMonsterTeam(PacketDeserializer deserializer, int length = 0)
 {
     return(default);
Exemple #29
0
 private static Vector3 ReadVector3(PacketDeserializer deserializer, int length = 0) => new Vector3(deserializer.Read <float>(), deserializer.Read <float>(), deserializer.Read <float>());
Exemple #30
0
        private Task DispatchPacket(UncompressedPacket packet)
        {
            var  br = new SpanReader(packet.Data);
            Task task;

            switch (packet.PacketId)
            {
            // Teleport Confirm
            case 0x00:
                task = DispatchPacket(PacketDeserializer.Deserialize <TeleportConfirm>(ref br));
                break;

            // Chat Message
            case 0x03:
                task = DispatchPacket(PacketDeserializer.Deserialize <ServerboundChatMessage>(ref br));
                break;

            // Client Settings
            case 0x05:
                task = DispatchPacket(PacketDeserializer.Deserialize <ClientSettings>(ref br));
                break;

            // Plugin Message
            case 0x0B:
                task = DispatchPacket(PacketDeserializer.Deserialize <ServerboundPluginMessage>(ref br));
                break;

            // Keep Alive
            case 0x0F:
                task = DispatchPacket(PacketDeserializer.Deserialize <ServerboundKeepAlive>(ref br));
                break;

            // Player On Ground
            case 0x0D:
                task = DispatchPacket(PacketDeserializer.Deserialize <PlayerOnGround>(ref br));
                break;

            // Player Position
            case 0x11:
                task = DispatchPacket(PacketDeserializer.Deserialize <PlayerPosition>(ref br));
                break;

            // Position And Look (In new wiki, it is Player Position And Rotation)
            case 0x12:
                task = DispatchPacket(PacketDeserializer.Deserialize <ServerboundPositionAndLook>(ref br));
                break;

            // Player Look (In new wiki, it is Player Rotation)
            case 0x13:
                task = DispatchPacket(PacketDeserializer.Deserialize <PlayerLook>(ref br));
                break;

            // Player Digging
            case 0x1A:
                task = DispatchPacket(PacketDeserializer.Deserialize <PlayerDigging>(ref br));
                break;

            // Entity Action
            case 0x1B:
                task = DispatchPacket(PacketDeserializer.Deserialize <EntityAction>(ref br));
                break;

            // Held Item Change
            case 0x23:
                task = DispatchPacket(PacketDeserializer.Deserialize <ServerboundHeldItemChange>(ref br));
                break;

            // Animation
            case 0x2A:
                task = DispatchPacket(PacketDeserializer.Deserialize <ServerboundAnimation>(ref br));
                break;

            // Player Block Placement
            case 0x2C:
                task = DispatchPacket(PacketDeserializer.Deserialize <PlayerBlockPlacement>(ref br));
                break;

            // Use Item
            case 0x2D:
                task = DispatchPacket(PacketDeserializer.Deserialize <UseItem>(ref br));
                break;

            // Click Window
            case 0x09:
                task = DispatchPacket(PacketDeserializer.Deserialize <ClickWindow>(ref br));
                break;

            // Close Window
            case 0x0A:
                task = DispatchPacket(PacketDeserializer.Deserialize <ServerboundCloseWindow>(ref br));
                break;

            default:
                Logger.LogWarning($"Unrecognizable packet id: 0x{packet.PacketId:X2}.");
                return(Task.CompletedTask);
            }

            // Logger.LogInformation($"Got packet id: 0x{packet.PacketId:X2}.");
            if (!br.IsCosumed)
            {
                throw new InvalidDataException($"Packet data is not fully consumed, packet id: 0x{packet.PacketId:X2}.");
            }
            return(task);
        }