public void Disconnect() { byte[] data; int pos; if (IsMain) { IPAddress ip = null; foreach (IPEndPoint ipep in _connections) { if (ipep != null && (ipep.Address != CIp && ipep.Port != CPort)) { ip = ipep.Address; } } if (ip != null) { data = new byte[sizeof(int) + sizeof(long) + sizeof(int)]; pos = 0; BinaryHelper.Write((int)UDPCommands.ServerChanged, ref pos, ref data); BinaryHelper.Write(ip.Address, ref pos, ref data); BinaryHelper.Write(GameLevel.BonusId, ref pos, ref data); _broadcast(data); } } data = new byte[sizeof(int) * 2]; pos = 0; //BinaryHelper.Write((int)UDPCommands.ClientDisconnected, ref pos, ref data); // BinaryHelper.Write(CurrentPlayer.Id, ref pos, ref data); _broadcast(data); _thread.Abort(); _client.Close(); }
private void _sendConnections(IPEndPoint ipep) { int length = sizeof(int) + (sizeof(long) + sizeof(int)) * (_connections.Count + 1); byte[] data = new byte[length]; int pos = 0; BinaryHelper.Write(_connections.Count, ref pos, ref data); foreach (IPEndPoint c in _connections) { if (c != null) { BinaryHelper.Write(c.Address.Address, ref pos, ref data); BinaryHelper.Write(c.Port, ref pos, ref data); } else { BinaryHelper.Write((long)-1, ref pos, ref data); BinaryHelper.Write(-1, ref pos, ref data); } } BinaryHelper.Write(ipep.Address.Address, ref pos, ref data); BinaryHelper.Write(ipep.Port, ref pos, ref data); _client.Send(data, length, ipep); }
public override void WriteTo(Stream writer) { BinaryHelper.Write(writer, ((ushort)(6 + Target.GetByteCount()))); BinaryHelper.Write(writer, Priority); BinaryHelper.Write(writer, Weight); BinaryHelper.Write(writer, Port); Target.WriteTo(writer); }
public void WriteTo(Stream stream) { DomainName.WriteTo(stream); BinaryHelper.Write(stream, (ushort)Type); BinaryHelper.Write(stream, (ushort)Class); BinaryHelper.Write(stream, Ttl); if (ResponseData != null) { ResponseData.WriteTo(stream); } }
public override void WriteTo(Stream writer) { ushort length = Length; BinaryHelper.Write(writer, length); if (length > 0) { BinaryHelper.Write(writer, Bytes); } }
public void WriteTo(Stream stream) { foreach (string label in this) { if (label.Length == 0) { break; } byte[] bytes = Encoding.UTF8.GetBytes(label); //labels.Add(new KeyValuePair<byte[], byte>(bytes, (byte)bytes.Length)); //totalLength += (ushort)(bytes.Length + 1); stream.WriteByte((byte)bytes.Length); BinaryHelper.Write(stream, bytes); } stream.WriteByte(0); }
public override void WriteTo(Stream stream) { //ID BinaryHelper.Write(stream, ID); //Qr, Opcode, Aa, Tc, Rd byte b = 0; b += (byte)QueryResponse; b = (byte)(b << 4); b += (byte)OpCode; b = (byte)(b << 1); b += (AuthoritativeAnswer) ? (byte)1 : (byte)0; b = (byte)(b << 1); b += (Truncated) ? (byte)1 : (byte)0; b = (byte)(b << 1); b += (RecursionDesired) ? (byte)1 : (byte)0; stream.WriteByte(b); //Ra, Z, Rcode b = 0; b += (RecursionAvailable) ? (byte)1 : (byte)0; b = (byte)(b << 7); b += (byte)ResponseCode; stream.WriteByte(b); BinaryHelper.Write(stream, QuestionEntries); BinaryHelper.Write(stream, AnswerEntries); BinaryHelper.Write(stream, AuthorityEntries); BinaryHelper.Write(stream, AdditionalEntries); foreach (Question q in Questions) { q.WriteTo(stream); } foreach (Answer a in Answers) { a.WriteTo(stream); } foreach (Answer a in Authorities) { a.WriteTo(stream); } foreach (Answer a in Additionals) { a.WriteTo(stream); } }
private void _sendBonuses(IPEndPoint ipep) { var bonuses = Bonuses; int length = bonuses.Count * (sizeof(int) + sizeof(int) + sizeof(int) + sizeof(byte)) + sizeof(int); byte[] data = new byte[length]; int pos = 0; BinaryHelper.Write(bonuses.Count, ref pos, ref data); foreach (KeyValuePair <int, Bonus> B in bonuses) { BinaryHelper.Write(B.Value.Id, ref pos, ref data); BinaryHelper.Write(B.Value.iX, ref pos, ref data); BinaryHelper.Write(B.Value.iY, ref pos, ref data); BinaryHelper.Write((byte)B.Value.Type, ref pos, ref data); } _client.Send(data, data.Length, ipep); }
public void Update(Player p) { int pos = 0; int length = BASIC_DATA_LENGTH; if (lastAddedBonus != null) { length += BONUS_DATA_LENGTH; } byte[] data = new byte[length]; BinaryHelper.Write(p.Id, ref pos, ref data); BinaryHelper.Write(p.X, ref pos, ref data); BinaryHelper.Write(p.Y, ref pos, ref data); BinaryHelper.Write(p.Direction, ref pos, ref data); BinaryHelper.Write(p.Shooting, ref pos, ref data); BinaryHelper.Write((int)p.Team, ref pos, ref data); BinaryHelper.Write((byte)p.CurrentInvItemAKey, ref pos, ref data); if (p.LastUsedInvItem != null) { BinaryHelper.Write((int)p.LastUsedInvItem.Type, ref pos, ref data); } else { BinaryHelper.Write(0, ref pos, ref data); } BinaryHelper.Write(lastRemovedBonus, ref pos, ref data); lastRemovedBonus = -1; BinaryHelper.Write(p.Deaths, ref pos, ref data); BinaryHelper.Write(p.Kills, ref pos, ref data); if (lastAddedBonus != null) { BinaryHelper.Write(lastAddedBonus.Id, ref pos, ref data); BinaryHelper.Write(lastAddedBonus.X, ref pos, ref data); BinaryHelper.Write(lastAddedBonus.Y, ref pos, ref data); BinaryHelper.Write((byte)lastAddedBonus.Type, ref pos, ref data); lastAddedBonus = null; } _broadcast(data); }
public override void WriteTo(Stream writer) { ushort length = 0; List <KeyValuePair <byte[], byte> > bytes = new List <KeyValuePair <byte[], byte> >(); foreach (KeyValuePair <string, string> kvp in Properties) { byte[] kvpBytes = Encoding.UTF8.GetBytes(kvp.Key + "=" + kvp.Value); bytes.Add(new KeyValuePair <byte[], byte>(kvpBytes, (byte)kvpBytes.Length)); //writer.Write((byte)kvpBytes.Length); //writer.Write(kvpBytes); length += (ushort)kvpBytes.Length; length++; } BinaryHelper.Write(writer, length); foreach (var properties in bytes) { writer.WriteByte(properties.Value); BinaryHelper.Write(writer, properties.Key); } }
public AddPlayerResult AddPlayer(List <Player> Players) { this.Players = Players; _client.Send(BitConverter.GetBytes((int)UDPCommands.ConnectToGame), sizeof(int), ServerIpEp); _getConnections(); for (int i = 0; i < _connections.Count; i++) { if (_connections[i] != null) { currentTeamCaret += 1; Player player = new Player(i, 0, 0); if (gameMode == Modes.Deathmatch) { player.SetTeam((Teams)currentTeamCaret); } Players.Add(player); _requestTime.Add(DateTime.Now); } else { Players.Add(null); _requestTime.Add(new DateTime()); } } AddPlayerResult result = new AddPlayerResult(); IPEndPoint ipep = null; int pos = 0; byte[] data = _client.Receive(ref ipep); result.Mode = BinaryHelper.ReadInt32(data, ref pos); gameMode = (Modes)result.Mode; // Receiving var currentGameState = _receiveGameState(_client); result.LevelWidth = (int)currentGameState[0]; result.LevelHeight = (int)currentGameState[1]; result.Tiles = (List <GEntity>)currentGameState[2]; result.Entities = (List <GEntity>)currentGameState[3]; result.Spawners = (List <GEntity>)currentGameState[4]; data = _client.Receive(ref ipep); // Bonuses data result.Bonuses = _getBonuses(data); pos = 0; data = _client.Receive(ref ipep); Spawner spawner = (Spawner)result.Spawners[Program.Rand.Next(0, result.Spawners.Count - 1)]; CurrentPlayer = new Player(BinaryHelper.ReadInt32(data, ref pos), spawner.X, spawner.Y); result.Player = CurrentPlayer; if (gameMode == Modes.Deathmatch) { result.Player.SetTeam((Teams)currentTeamCaret); } Players[CurrentPlayer.Id] = CurrentPlayer; _requestTime[CurrentPlayer.Id] = DateTime.Now; _thread = new Thread(_waitForClientData); _thread.Start(); System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); timer.Interval = 100; timer.Start(); CurrentPlayer.Removed = true; IsConnected = false; timer.Tick += _timer_Tick; data = new byte[sizeof(int) * 2]; pos = 0; BinaryHelper.Write((int)UDPCommands.AddPlayer, ref pos, ref data); BinaryHelper.Write(CurrentPlayer.Id, ref pos, ref data); _broadcast(data); return(result); }
public override void WriteTo(Stream writer) { BinaryHelper.Write(writer, DomainName.GetByteCount()); DomainName.WriteTo(writer); }
public override void WriteTo(Stream writer) { byte[] address = Address.GetAddressBytes(); BinaryHelper.Write(writer, (ushort)address.Length); BinaryHelper.Write(writer, address); }
public override void WriteTo(Stream writer) { BinaryHelper.Write(writer, ((ushort)Encoding.UTF8.GetByteCount(CNAME))); BinaryHelper.Write(writer, Encoding.UTF8.GetBytes(CNAME)); }
public void WriteTo(Stream stream) { DomainName.WriteTo(stream); BinaryHelper.Write(stream, (ushort)Type); BinaryHelper.Write(stream, (ushort)Class); }