/// <summary> /// Sends a packet to clients /// </summary> /// <param name="target">the target from which area will be calculated</param> /// <param name="packet">packet data</param> /// <param name="area">the target area</param> public void Send(GameObject target, PacketStream packet, BroadcastArea area) { byte[] data = packet.GetPacket().ToArray(); ConsoleUtils.HexDump(data, "Sent to Client"); List<Player> players = new List<Player>(); // Gets the list of players who will receive this packet switch (area) { case BroadcastArea.Self: if (target.ObjType != ObjectType.Player) { ConsoleUtils.ShowError("Trying to send packet to a non-player object."); return; } players.Add((Player)target); break; case BroadcastArea.Region: // TODO : Get players in region if (target.ObjType == ObjectType.Player) players.Add((Player)target); break; case BroadcastArea.World: // TODO : Get all players in the server if (target.ObjType == ObjectType.Player) players.Add((Player)target); break; default: ConsoleUtils.ShowError("Unknown Broadcast Area."); return; } // Sends data to every client in the list foreach (Player client in players) { client.NetData.ClSocket.BeginSend( client.NetData.OutCipher.DoCipher(ref data), 0, data.Length, 0, new AsyncCallback(SendCallback), client ); } }