WritePadBits() public method

Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes.
public WritePadBits ( ) : void
return void
        /// <summary>
        /// Send NetIntroduction to hostExternal and clientExternal; introducing client to host
        /// </summary>
        public void Introduce(
            IPEndPoint hostInternal,
            IPEndPoint hostExternal,
            IPEndPoint clientInternal,
            IPEndPoint clientExternal,
            string token)
        {
            // send message to client
            NetOutgoingMessage msg = CreateMessage(10 + token.Length + 1);

            msg.m_messageType = NetMessageType.NatIntroduction;
            msg.Write(false);
            msg.WritePadBits();
            msg.Write(hostInternal);
            msg.Write(hostExternal);
            msg.Write(token);
            m_unsentUnconnectedMessages.Enqueue(new NetTuple <IPEndPoint, NetOutgoingMessage>(clientExternal, msg));

            // send message to host
            msg = CreateMessage(10 + token.Length + 1);
            msg.m_messageType = NetMessageType.NatIntroduction;
            msg.Write(true);
            msg.WritePadBits();
            msg.Write(clientInternal);
            msg.Write(clientExternal);
            msg.Write(token);
            m_unsentUnconnectedMessages.Enqueue(new NetTuple <IPEndPoint, NetOutgoingMessage>(hostExternal, msg));
        }
Exemplo n.º 2
0
            /// <summary>
            /// Generates a message
            /// </summary>
            /// <param name="result">result to generate to</param>
            /// <param name="data">data to generate from</param>
            /// <returns>Message containing data</returns>
            public static NetOutgoingMessage GenerateMessage(NetOutgoingMessage result, Packet data)
            {
                if (data.IsReadOnly)
                    throw new HandShakeException("Can not generate a message from a readonly packet");

                // TODO: check for expiration time
                result.WritePadBits();
                data.Puts(result);
                result.WritePadBits();
                data.Mark();

                return result;
            }
Exemplo n.º 3
0
 public static NetOutgoingMessage Compress(NetOutgoingMessage msg)
 {
     msg.WritePadBits();
     byte[] input = msg.PeekDataBuffer();
     byte[] output = new byte[input.Length*2];
     int outlength = ZipCompressor.Instance.Compress(input, msg.LengthBytes, output);
     msg.EnsureBufferSize(outlength*8);
     input = msg.PeekDataBuffer();
     Array.Copy(output, input, outlength);
     msg.LengthBytes = outlength;
     msg.LengthBits = outlength * 8;
     return msg;
 }