/// <summary> /// Broadcasts a packet to all clients, optionally excluding the sender. /// </summary> /// <param name="packet">The packet to be broadcasted.</param> /// <param name="excludeClient">The client to excluded; usually the sender.</param> internal void Broadcast(Packet packet, IClient iExcludeClient = null) { Client[] clients = GetClients() as Client[]; if (clients.Length == 0) return; packet.SetShared(Logger, clients.Length); Client excludeClient = iExcludeClient as Client; foreach (Client c in clients) { if (excludeClient == null || c.Owner.EntityId != excludeClient.Owner.EntityId) c.SendPacket(packet); } }
/// <summary> /// Broadcasts a packet to all authenticated clients /// </summary> /// <param name="packet"></param> internal void BroadcastToAuthenticated(Packet packet) { Client[] authClients = GetAuthenticatedClients() as Client[]; if (authClients.Length == 0) return; packet.SetShared(Logger, authClients.Length); Parallel.ForEach(authClients, (client) => client.SendPacket(packet)); }
/// <summary> /// Sends a packet in parallel to each nearby player. /// </summary> /// <param name="world">The world containing the coordinates.</param> /// <param name="coords">The center coordinates.</param> /// <param name="packet">The packet to send</param> internal void SendPacketToNearbyPlayers(WorldManager world, UniversalCoords coords, Packet packet, Client excludedClient = null) { Client[] nearbyClients = GetNearbyPlayersInternal(world, coords).ToArray(); if (nearbyClients.Length == 0) return; packet.SetShared(Logger, nearbyClients.Length); Parallel.ForEach(nearbyClients, (client) => { if (excludedClient != client) client.SendPacket(packet); else packet.Release(); }); }
// TODO: This should be removed in favor of the one below /// <summary> /// Sends a packet in parallel to each nearby player. /// </summary> /// <param name="world">The world containing the coordinates.</param> /// <param name="absCoords>The center coordinates.</param> /// <param name="packet">The packet to send</param> internal void SendPacketToNearbyPlayers(WorldManager world, AbsWorldCoords absCoords, Packet packet) { Client[] nearbyClients = GetNearbyPlayersInternal(world, UniversalCoords.FromAbsWorld(absCoords)).ToArray(); if (nearbyClients.Length == 0) return; packet.SetShared(Logger, nearbyClients.Length); Parallel.ForEach(nearbyClients, (client) => { client.SendPacket(packet); }); }
/// <summary> /// Sends a packet in parallel to each nearby player. /// </summary> /// <param name="world">The world containing the coordinates.</param> /// <param name="coords">The center coordinates.</param> /// <param name="packet">The packet to send</param> public void SendPacketToNearbyPlayers(WorldManager world, UniversalCoords coords, Packet packet, Client excludedClient = null) { Client[] nearbyClients = GetNearbyPlayers(world, coords).ToArray(); if (nearbyClients.Length == 0 || (excludedClient != null && nearbyClients.Length == 1)) return; packet.SetShared(Logger, excludedClient == null ? nearbyClients.Length : nearbyClients.Length - 1); Parallel.ForEach(nearbyClients, (client) => { if (excludedClient != client) client.SendPacket(packet); }); }
/// <summary> /// Broadcasts a packet to all authenticated clients /// </summary> /// <param name="packet"></param> public void BroadcastToAuthenticated(Packet packet) { Client[] authClients = GetAuthenticatedClients(); if (authClients.Length == 0) return; packet.SetShared(Logger, authClients.Length); System.Threading.Tasks.Parallel.ForEach(authClients, (client) => client.SendPacket(packet)); }
/// <summary> /// Broadcasts a packet to all clients, optionally excluding the sender. /// </summary> /// <param name="packet">The packet to be broadcasted.</param> /// <param name="excludeClient">The client to excluded; usually the sender.</param> public void Broadcast(Packet packet, Client excludeClient = null) { Client[] clients = GetClients(); if (clients.Length == 0) return; packet.SetShared(Logger, clients.Length); foreach (Client c in GetClients()) { if (excludeClient == null || c.Owner.EntityId != excludeClient.Owner.EntityId) c.SendPacket(packet); } }