예제 #1
0
 public void SendAll(APacket packet)
 {
     foreach (ServerClient client in _clients)
     {
         client.Send(packet);
     }
 }
예제 #2
0
        public async Task SendAllAsync(APacket packet)
        {
            List <Task> taskList = new List <Task>(_clients.Count);

            foreach (ServerClient client in _clients)
            {
                taskList.Add(client.SendAsync(packet));
            }
            await Task.WhenAll(taskList);
        }
예제 #3
0
        public void BroadCast(APacket packet, Client except = null)
        {
            foreach (Client c in Clients)
            {
                if (except == c)
                {
                    continue;
                }

                c.AddResponse(packet.Clone() as APacket);
            }
        }
예제 #4
0
 public byte[] Serialize(APacket packet, string key, bool isCommand)
 {
     try
     {
         return(packet.Serialize(key, isCommand));
     }
     catch (Exception e)
     {
         DebugUtil.LogError <PacketDeserializer>(DebugLocation.Internal, "Serialize", e.Message);
         return(null);
     }
 }
예제 #5
0
        public void AddResponse(APacket packet, bool immediate = true)
        {
            packet.Destination = this;
            PacketWriterWorker worker = PacketWriterWorker.Instance;

            if (immediate == true)
            {
                worker.Packets.Add(packet);
            }
            else
            {
                _packetQueue.Add(packet);
            }
        }
예제 #6
0
        public virtual void Add(APacket packet)
        {
            Memory <byte> packetMem = new Memory <byte>(new byte[packet.Length + _size]);
            int           length    = packet.Length;

            for (int i = 0; i < _size; ++i)
            {
                packetMem.Span[packet.Length + _size - i - 1] = (byte)(length & 255);
                length >>= 8;
            }
            if (length != 0)
            {
                throw new Exception($"{nameof(Add)}: packet was too big to add!");
            }
            packet.Read().CopyTo(packetMem);
            Write(packetMem);
        }
예제 #7
0
        public void ReadPacket(Client client, byte[] buffer, int lengthRead)
        {
            try
            {
                ByteBuffer byteBuffer = new ByteBuffer();

                byteBuffer.Write(buffer, 0, lengthRead);
                byteBuffer.Position = 0;

                while (byteBuffer.Position < lengthRead)
                {
                    int len = byteBuffer.ReadVarInt();
                    int id  = byteBuffer.ReadVarInt();

                    object tmp = client.State.Peek()._ReceiptPackets[id];
                    if (tmp != null)
                    {
                        APacket packet = tmp as APacket;
                        packet = packet.Clone() as APacket;
                        if (packet == null)
                        {
                            throw new NullReferenceException("The server does not handle packet " + id);
                        }

                        packet.Read(client, byteBuffer);
                    }
                    else
                    {
                        Console.WriteLine("Unhandled packet - ID : " + id + " - Length : " + len);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("ERROR : " + e.Message);
            }
        }
예제 #8
0
 public async Task ReceiveAsync(APacket packet)
 {
     await packet.ReceiveAsync(Stream);
 }
예제 #9
0
 public void Receive(APacket packet)
 {
     packet.Receive(Stream);
 }
예제 #10
0
 public async Task SendAsync(APacket packet)
 {
     await packet.SendAsync(Stream);
 }
예제 #11
0
 public void Send(APacket packet)
 {
     packet.Send(Stream);
 }
예제 #12
0
 protected void AddSendPacket(int index, APacket packet)
 {
     _SendPackets[index] = packet;
 }
예제 #13
0
 protected void AddReceiptPacket(int index, APacket packet)
 {
     _ReceiptPackets[index] = packet;
 }
예제 #14
0
 public void AddBroadCast(APacket packet, Client except = null)
 {
     TheWorld.BroadCast(packet, except);
 }