private async Task HandleClientRequest() { var builder = new PacketBuilder(); builder.AddInt16(0x0003); builder.AddBytes(new byte[6]); builder.AddByte(0x01); builder.AddString("Infantry", 9); builder.AddBytes(new byte[16]); var buffer = builder.GetBytes(); await this.networkClient.SendAsync(buffer, buffer.Length); }
/// <summary> /// Adds instance bytes to packet builder. /// </summary> protected override void AddInstanceBytes(PacketBuilder builder) { builder.AddUInt16((ushort)_commandType); builder.AddInt32(_sequence); builder.AddByte((byte)_code); builder.AddBytes(_data); }
/// <summary> /// Adds instance bytes to packet builder. /// </summary> protected override void AddInstanceBytes(PacketBuilder builder) { builder.AddUInt16((ushort)_commandType); builder.AddInt32(_sequence); builder.AddUInt16(_retryAttempt); builder.AddUInt32(_timeoutMs); builder.AddBytes(_data); }
/// <summary> /// Answers a 'GetPlayers' request, responds with a list of connected players (of same game). /// </summary> private void Answer_GetPlayers(Client sourceClient, CommandRequestPacket packet) { try { //get source player NetworkPlayer player = NetworkPlayer.FromPacket(packet); //get list of connected players (not source player) List <NetworkPlayer> otherPlayers = GetMatchingPlayers(player.GameTitle, player.GameVersion) .Where(p => p.PlayerKey != player.PlayerKey) .ToList(); //message Log.Write($"Sending '{packet.CommandType}' ({otherPlayers.Count} player{(otherPlayers.Count != 1 ? "s" : "")}) response to '{player.IP}'"); //serialize list to bytes PacketBuilder builder = new PacketBuilder(); builder.AddUInt16((ushort)otherPlayers.Count); foreach (NetworkPlayer p in otherPlayers) { builder.AddBytes(p.ToBytes()); } //create packet CommandResponsePacket response = new CommandResponsePacket( gameTitle: player.GameTitle, gameVersion: player.GameVersion, sourceIP: _ip, destinationIP: player.IP, playerName: player.Name, commandType: CommandType.GetPlayers, sequence: packet.Sequence, code: ResultCode.Accept, data: builder.ToBytes()); //send response back to source sourceClient.SendPacket(response); } catch (Exception ex) { Log.Write("Answer_GetPlayers: Error returning player list"); ErrorHandler.LogError(ex); } }
private async Task <ICollection <Zone> > HandleZoneListRequest() { var zones = new List <Zone>(); var builder = new PacketBuilder(); builder.AddInt16(0x0005); builder.AddBytes(new byte[26]); var buffer = builder.GetBytes(); await this.networkClient.SendAsync(buffer, buffer.Length); int chunkBufferLength; int chunk; int offset = 0; byte[] chunkBuffer = null; PacketReader reader; do { buffer = await this.networkClient.ReceiveAsync(); reader = new PacketReader(buffer); reader.ReadInt16(); reader.ReadInt16(); chunk = reader.ReadByte(); reader.ReadBytes(7); chunkBufferLength = reader.ReadLittleEndianInt16(); reader.ReadInt16(); if (chunkBuffer == null) { chunkBuffer = new byte[chunkBufferLength]; } offset += reader.CopyBytes(chunkBuffer, offset); builder = new PacketBuilder(); builder.AddInt16(0x000b); builder.AddInt16(0); builder.AddByte((byte)chunk); builder.AddPadding(3); buffer = builder.GetBytes(); await this.networkClient.SendAsync(buffer, buffer.Length); chunk++; } while (offset < (chunkBufferLength)); reader = new PacketReader(chunkBuffer); // Discard the 0x01 at the beginning reader.ReadByte(); while (reader.CanRead()) { var zone = new Zone(); zone.ServerAddress = reader.ReadIPAddress(); zone.ServerPort = reader.ReadUInt16(); reader.ReadBytes(6); zone.Name = reader.ReadString(32); reader.ReadInt16(); zone.IsAdvanced = reader.ReadBoolean(); reader.ReadBytes(29); zone.Description = reader.ReadString(); zones.Add(zone); } return(zones); }
/// <summary> /// Adds instance bytes to packet builder. /// </summary> protected override void AddInstanceBytes(PacketBuilder builder) { builder.AddBytes(_data); }