예제 #1
0
        public NetWrapOutgoingMessage CreateRPCPacket(params object[] objs)
        {
            NetWrapOutgoingMessage msg    = new NetWrapOutgoingMessage();
            List <byte>            packet = new List <byte>();

            packet.AddRange(RPCHeader);
            packet.Add(255);

            int count = 0;

            foreach (var obj in objs)
            {
                var stream = new MemoryStream(2048);
                RPCStream.AddCall(stream, obj);
                var array = stream.ToArray();
                if (array.Length > 512)
                {
                    packet.AddRange(BitConverter.GetBytes(-array.Length));
                    packet.AddRange(NetCompressByteArray.Wrap(array));
                }
                else
                {
                    packet.AddRange(BitConverter.GetBytes(array.Length));
                    packet.AddRange(array);
                }
                count++;
            }

            // set count to correct count (255 -> count)
            packet[4] = (byte)count;

            msg.Message       = packet.ToArray();
            msg.MessageCount  = packet.Count;
            msg.MessageOffset = 0;
            return(msg);
        }