コード例 #1
0
        public unsafe void QueuePacket(IMessage message, PacketId packetId, IPlugin plugin, Channel channel)
        {
            lock (AddQueueLock)
            {
                if (sizeCounter > MaxPacketQueueSize)
                {
                    while (packetQueue.Count > 0)
                    {
                        SendQueue();
                    }
                }

                NetworkPayloadWriter temp = message.WritePacket(message, conn);
                message.RawSize = temp.Length - conn.HEADER_SIZE;
                byte[] packet = temp.GetPayload();

                lock (packetQueue)
                {
                    packetQueue.Enqueue(new PacketQueueInfo(packet, packetId, plugin, channel, conn.messageHandler.GetMessageId(message.GetType())));
                    sizeCounter += packet.Length;
                }

                if (!threadRunning)
                {
                    threadRunning = true;
                    ThreadPool.QueueUserWorkItem((object obj) => WorkerThread());
                }
                arSizeUpdate.Set();
            }
        }
コード例 #2
0
        public byte[] ToByteArray(Connection connection)
        {
            NetworkPayloadWriter pw = new NetworkPayloadWriter(connection);

            WriteHeader(null, 0, 0, pw);
            return(pw.GetPayload());
        }