예제 #1
0
 protected NetObjectRPCEvent(NetObject destObject, RPCGuaranteeType gType, NetObjectRPCDirection dir)
     : base(gType, RPCDirection.RPCDirAny)
 {
     DestObject   = destObject;
     RpcDirection = dir;
 }
예제 #2
0
 protected RPCEvent(RPCGuaranteeType gType, RPCDirection dir)
     : base((GuaranteeType)gType, (EventDirection)dir)
 {
 }
예제 #3
0
        public void SendPacket(Packet p, RPCGuaranteeType type)
        {
            var opcode = (UInt32) p.Opcode;
            Logger.WriteLog("Outgoing Packet: {0}", LogType.Network, p.Opcode);

            var arr = p.ToArray();

            using (var sw = new StreamWriter("sent.txt", true, Encoding.UTF8))
            {
                sw.WriteLine(BitConverter.ToString(arr));
                sw.WriteLine();
            }

            var arrLength = (UInt32) arr.Length;
            if (arrLength > 1400U)
            {
                ++_fragmentCounter;

                var doneSize = 0U;
                var count = (UInt16) Math.Ceiling(arrLength / 220.0);
                for (UInt16 i = 0; i < count; ++i)
                {
                    var buffSize = 220U;
                    if (buffSize >= arrLength - doneSize)
                        buffSize = arrLength - doneSize;

                    var tempBuff = new Byte[buffSize];

                    Array.Copy(arr, i * 220, tempBuff, 0, buffSize);

                    var stream = new ByteBuffer(tempBuff, buffSize);

                    doneSize += buffSize;

                    switch (type)
                    {
                        case RPCGuaranteeType.RPCGuaranteed:
                            rpcMsgGuaranteedFragmented(opcode, _fragmentCounter, i, count, stream);
                            break;

                        case RPCGuaranteeType.RPCGuaranteedOrdered:
                            rpcMsgGuaranteedOrderedFragmented(opcode, _fragmentCounter, i, count, stream);
                            break;

                        case RPCGuaranteeType.RPCUnguaranteed:
                            rpcMsgNonGuaranteedFragmented(opcode, _fragmentCounter, i, count, stream);
                            break;
                    }
                }
            }
            else
            {
                var stream = new ByteBuffer(arr, arrLength);

                switch (type)
                {
                    case RPCGuaranteeType.RPCGuaranteed:
                        rpcMsgGuaranteed(opcode, stream);
                        break;

                    case RPCGuaranteeType.RPCGuaranteedOrdered:
                        rpcMsgGuaranteedOrdered(opcode, stream);
                        break;

                    case RPCGuaranteeType.RPCUnguaranteed:
                        rpcMsgNonGuaranteed(opcode, stream);
                        break;
                }
            }
        }