Пример #1
0
        // [ protocol : 4
        //   k : 4
        //   len : 4
        //   index : 4
        //   len : 4
        //   opcode : 4
        //   value :
        //   ...
        //   index : 4
        private void ExecFrame()
        {
            int      k;
            NetFrame frame;

            if (_queue.Dequeue(out k, out frame) == 1)
            {
                try {
                    int offset = 0;
                    int index = 0, len = 0;
                    offset = NetUnpack.Unpackli(frame.buffer, offset, out index);
                    offset = NetUnpack.Unpackli(frame.buffer, offset, out len);
                    OpCodeParse(index, frame.buffer, offset, len);
                } catch (Exception ex) {
                    k = _queue.BackK();
                    int    len    = 8;
                    byte[] msg    = new byte[len];
                    int    offset = 0;
                    offset = NetPack.Packli(msg, offset, (int)ProtocolType.PT_FETCHK);
                    offset = NetPack.Packli(msg, offset, k);
                    _ctx.SendUdp(msg, 0, len);
                }
            }
            else
            {
                int    len    = 8;
                byte[] msg    = new byte[len];
                int    offset = 0;
                offset = NetPack.Packli(msg, offset, (int)ProtocolType.PT_FETCHK);
                offset = NetPack.Packli(msg, offset, k);
                _ctx.SendUdp(msg, 0, len);
            }
        }
Пример #2
0
        public void OpCodeParse(int index, byte[] buffer, int start, int len)
        {
            int  offset = start;
            uint opcode;

            offset = NetUnpack.UnpacklI(buffer, offset, out opcode);
            switch (opcode)
            {
            case OpCodes.OPCODE_BORN: {
            }
            break;

            default:
                break;
            }
        }
Пример #3
0
        public override void OnUdpRecv(byte[] data, int start, int len)
        {
            base.OnUdpRecv(data, start, len);
            int protocol;
            int offset = NetUnpack.Unpackli(data, 0, out protocol);

            if (protocol == ProtocolType.PT_DATA)
            {
                for (int i = 0; i < 3; i++)
                {
                    int k, sz;
                    offset = NetUnpack.Unpackli(data, offset, out k);
                    offset = NetUnpack.Unpackli(data, offset, out sz);
                    byte[] buffer = new byte[sz];
                    Array.Copy(data, offset, buffer, 0, sz);
                    NetFrame frame = new NetFrame();
                    frame.k      = k;
                    frame.buffer = buffer;
                    _queue.Enqueue(frame);
                }
                ExecFrame();
            }
        }