Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        /// <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();
            });
        }
Beispiel #4
0
        // 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);
            });
        }
Beispiel #5
0
        /// <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);
            });
        }
Beispiel #6
0
        /// <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));
        }
Beispiel #7
0
        /// <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);
            }
        }