public void Add(PacketFromServer m)
 {
     //Buffer to memory stream
     if (m.PacketBuffer == null)
         m.Prepare();
     Packet.WriteVarInt(w, m.PacketBuffer.Length);
     w.Write(m.PacketBuffer, 0, m.PacketBuffer.Length);
 }
 public void Add(PacketFromServer m)
 {
     //Buffer to memory stream
     if (m.PacketBuffer == null)
     {
         m.Prepare();
     }
     Packet.WriteVarInt(w, m.PacketBuffer.Length);
     w.Write(m.PacketBuffer, 0, m.PacketBuffer.Length);
 }
示例#3
0
        protected override void SendToClientInternal(PacketFromServer packet)
        {
            try
            {
                if (packet.PacketBuffer == null)
                    packet.Prepare();

                Debug.ToClient(this, packet);

                if (packet is PrecompiledPacket)
                {
                    lock (clientStream)
                        clientStream.Write(packet.PacketBuffer, 0, packet.PacketBuffer.Length);
                    return;
                }

                lock (clientStream)
                {
                    if(maxUncompressed >= 0)
                    {
                        Packet.WriteVarInt(clientStream, packet.PacketBuffer.Length + Packet.VarIntSize(packet.PacketBufferUncompressedSize)); //Uncompressed size length
                        Packet.WriteVarInt(clientStream, packet.PacketBufferUncompressedSize); //Uncompressed size if compressed
                    }
                    else
                        Packet.WriteVarInt(clientStream, packet.PacketBuffer.Length);

                    clientStream.Write(packet.PacketBuffer, 0, packet.PacketBuffer.Length);
                    #if DEBUG
                    clientStream.Flush();
                    #endif
                }
            }
            catch (SocketException se)
            {
                Phase = Phases.FinalClose;
                Close(se.Message);
            }
            catch (IOException ioe)
            {
                Phase = Phases.FinalClose;
                Close(ioe.Message);
            }
            catch (ObjectDisposedException)
            {
                Phase = Phases.FinalClose;
            }
        }