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"); } }
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); }
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() }); }
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!"); }
private void OnMessage(object sender, MessageEventArgs message) { if (!message.IsText) { return; } OnDataReceived(new SocketDataReceived { Packet = PacketDeserializer.Deserialize(message.Data, Key, Type == GSLiveType.Command) }); }
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}."); } }
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}."); } }
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); }