Exemple #1
0
 public void WritePacket(Packet packet)
 {
     Write((byte)packet.GetPacketType());
     //packet.WriteFlush(this);
 }
Exemple #2
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));
        }
Exemple #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>
        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);
            });
        }
Exemple #4
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));
        }
Exemple #5
0
 public void SendPacket(Packet packet)
 {
     lock (PacketQueue)
         PacketQueue.Enqueue(packet);
 }
 public PacketSentEventArgs(Packet Packet, Socket Socket, Client Client)
     : base(Packet, Socket, Client)
 {
 }
Exemple #7
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();
            });
        }
Exemple #8
0
        public void SendPacket(Packet packet)
        {
            if (!Running)
                return;

            packetsToBeSent.Enqueue(packet);

            int newValue = Interlocked.Increment(ref _TimesEnqueuedForSend);

            if ((newValue - 1) == 0)
                Server.SendClientQueue.Enqueue(this);

            //Logger.Log(Chraft.Logger.LogLevel.Info, "Sending packet: {0}", packet.GetPacketType().ToString());

            _Player.Server.NetworkSignal.Set();
        }
Exemple #9
0
        public void Send_Start(Packet packet = null)
        {
            if(!Running)
            {
                DisposeSendSystem();
                return;
            }

            try
            {
                byte[] data;
                if (packet == null)
                {
                    if (packetsToBeSent.Count > 0)
                    {
                        if (!packetsToBeSent.TryDequeue(out packet))
                        {
                            Interlocked.Exchange(ref _TimesEnqueuedForSend, 0);
                            return;
                        }

                        packet.Write();
                        data = packet.GetBuffer();

                        if (packet.Async)
                            Send_Async(data);
                        else
                        {
                            Send_Sync(data);
                            while (Running && packetsToBeSent.Count > 0)
                            {
                                if (!packetsToBeSent.TryDequeue(out packet))
                                {
                                    Interlocked.Exchange(ref _TimesEnqueuedForSend, 0);
                                    return;
                                }

                                if (packet.Async)
                                    break;

                                packet.Write();
                                data = packet.GetBuffer();

                                Send_Sync(data);
                                packet = null;
                            }

                            if (packet != null)
                                Send_Start(packet);
                            else
                                Interlocked.Exchange(ref _TimesEnqueuedForSend, 0);
                        }
                    }
                    else
                        Interlocked.Exchange(ref _TimesEnqueuedForSend, 0);
                }
                else
                {
                    packet.Write();
                    data = packet.GetBuffer();
                    Send_Async(data);
                }
            }
            catch (Exception e)
            {
                MarkToDispose();
                DisposeSendSystem();
                Logger.Log(Logger.LogLevel.Error, e.Message);
                // TODO: log something?
            }
        }
Exemple #10
0
 public void SendPacket(Packet packet)
 {
     this.PacketHandler.SendPacket(packet);
 }
Exemple #11
0
        private void SendPacketToAllNearbyPlayers(Packet packet)
        {
            Dictionary<int, Client> nearbyClients = new Dictionary<int, Client>();
            int radius = Settings.Default.SightRadius;
            for (int x = X - radius; x <= X + radius; ++x)
            {
                for (int z = Z - radius; z <= Z + radius; ++z)
                {
                    Chunk c = World[x, z, false, false];

                    if (c != null)
                    {
                        foreach (Client client in c.GetClients())
                        {
                            if (!nearbyClients.ContainsKey(client.SessionID))
                            {
                                nearbyClients.Add(client.SessionID, client);
                                client.PacketHandler.SendPacket(packet);
                            }
                        }
                    }
                }
            }
        }
Exemple #12
0
 public void Send_Sync_Packet(Packet packet)
 {
     packet.Write();
     Send_Sync(packet.GetBuffer());
     packet.Release();
 }
Exemple #13
0
        private void SendPacketToAllNearbyPlayers(Packet packet)
        {
            Dictionary<int, Client> nearbyClients = new Dictionary<int, Client>();
            int radius = Settings.Default.SightRadius;

            int chunkX = Coords.ChunkX;
            int chunkZ = Coords.ChunkZ;

            for (int x = chunkX - radius; x <= chunkX + radius; ++x)
            {
                for (int z = chunkZ - radius; z <= chunkZ + radius; ++z)
                {
                    Chunk c = World.GetChunkFromChunk(x, z, false, false);

                    if (c != null)
                    {
                        foreach (Client client in c.GetClients())
                        {
                            if (!nearbyClients.ContainsKey(client.Owner.SessionID))
                            {
                                nearbyClients.Add(client.Owner.SessionID, client);
                                client.SendPacket(packet);
                            }
                        }
                    }
                }
            }
        }
Exemple #14
0
        private void SendPacket(Packet packet)
        {
            _packetsToSend.Enqueue(packet);

            int sendRunning = Interlocked.CompareExchange(ref SendRunning, 1, 0);
            if (sendRunning == 0)
                _sendTask = Task.Factory.StartNew(Send);
        }
 public PacketEventArgs(Packet Packet, Socket Socket, Client Client)
 {
     this.Socket = Socket;
     this.Client = Client;
     this.Packet = Packet;
 }
Exemple #16
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)
 {
     foreach (Client c in GetClients())
     {
         if (excludeClient == null || c.EntityId != excludeClient.EntityId)
             c.SendPacket(packet);
     }
 }
 public PacketRecevedEventArgs(Packet Packet, Socket Socket, Client Client)
     : base(Packet, Socket, Client)
 {
 }
Exemple #18
0
 /// <summary>
 /// Broadcasts a packet to all authenticated clients
 /// </summary>
 /// <param name="packet"></param>
 public void BroadcastToAuthenticated(Packet packet)
 {
     System.Threading.Tasks.Parallel.ForEach(this.GetAuthenticatedClients(), (client) =>
     {
         client.SendPacket(packet);
     });
 }
Exemple #19
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);
            });
        }
Exemple #20
0
 /// <summary>
 /// Sends a packet in parallel to each nearby player.
 /// </summary>
 /// <param name="world">The world containing the coordinates.</param>
 /// <param name="x">The center X coordinate.</param>
 /// <param name="y">The center Y coordinate.</param>
 /// <param name="z">The center Z coordinate.</param>
 /// <param name="packet">The packet to send</param>
 public void SendPacketToNearbyPlayers(WorldManager world, double x, double y, double z, Packet packet)
 {
     System.Threading.Tasks.Parallel.ForEach(this.GetNearbyPlayers(world, x, y, z), (client) =>
     {
         client.PacketHandler.SendPacket(packet);
     });
 }
Exemple #21
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);
            }
        }
Exemple #22
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);
            }
        }
        public void SendPacket(Packet packet)
        {
            lock (QueueLock)
                CurrentPacketQueue.Enqueue(packet);

            ToSend.Set();
        }
Exemple #24
0
 /// <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>
 public void SendPacketToNearbyPlayers(WorldManager world, AbsWorldCoords absCoords, Packet packet)
 {
     Parallel.ForEach(this.GetNearbyPlayers(world, absCoords), (client) =>
     {
         client.SendPacket(packet);
     });
 }