Пример #1
0
        /// <summary>
        /// 创建基本识别头
        /// </summary>
        /// <returns></returns>
        internal static _TAG_NETPACK_DISTINGUISHHEAD CreateDistinguishHead()
        {
            _TAG_NETPACK_DISTINGUISHHEAD head = new _TAG_NETPACK_DISTINGUISHHEAD();

            head._flag    = DecDefines.NETPACK_FLAG;
            head._version = DecDefines.NETPACK_DISTHEAD_VER1;
            head._cbsize  = (byte)Marshal.SizeOf(typeof(_TAG_NETPACK_DISTINGUISHHEAD_VER1));
            return(head);
        }
Пример #2
0
        private _TAG_NETPACK_DISTINGUISHHEAD_VER1 CreateVer1Head(byte packType,
                                                                 ushort baseHeadType,
                                                                 ushort extHeadType,
                                                                 ushort validSize)
        {
            _TAG_NETPACK_DISTINGUISHHEAD distHead = Helpers.CreateDistinguishHead();
            ushort distHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_DISTINGUISHHEAD));

            ushort baseHeadSize = 0;

            switch (baseHeadType)
            {
            case DecDefines.NETPACK_BASETYPE_NOTHING:
                baseHeadSize = 0;
                break;

            case DecDefines.NETPACK_BASETYPE_APPLICATION_VER1:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(NETPACK_BASEHEAD_APPLICATION_VER1));
                break;

            case DecDefines.NETPACK_BASETYPE_CONNECT_ERROR:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_ERROR));
                break;

            case DecDefines.NETPACK_BASETYPE_CONNECT_HELLO:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_CONNECT_HELLO));
                break;

            case DecDefines.NETPACK_BASETYPE_CONNECT_WELCOME:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_CONNECT_WELCOME));
                break;

            case DecDefines.NETPACK_BASETYPE_CONNECT_LOGON:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_CONNECT_LOGON));
                break;

            case DecDefines.NETPACK_BASETYPE_CONNECT_AUTHEN:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_CONNECT_AUTHEN));
                break;

            case DecDefines.NETPACK_BASETYPE_REQ_ADDSUBSCRIBE:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_REQ_ADD_SUBSCRIBE));
                break;

            case DecDefines.NETPACK_BASETYPE_RES_ADDSUBSCRIBE:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_RES_ADD_SUBSCRIBE));
                break;

            case DecDefines.NETPACK_BASETYPE_REQ_DELSUBSCRIBE:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_REQ_DEL_SUBSCRIBE));
                break;

            case DecDefines.NETPACK_BASETYPE_RES_DELSUBSCRIBE:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_RES_DEL_SUBSCRIBE));
                break;

            case DecDefines.NETPACK_BASETYPE_REQ_CLEARSUBSCRIBE:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_REQ_CLEAR_SUBSCRIBE));
                break;

            case DecDefines.NETPACK_BASETYPE_RES_CLEARSUBSCRIBE:
                baseHeadSize = (ushort)Marshal.SizeOf(typeof(_TAG_NETPACK_BASEHEAD_RES_CLEAR_SUBSCRIBE));
                break;
            }
            ushort extHeadSize = 0;

            //扩展包头类型
            switch (extHeadType)
            {
            case DecDefines.NETPACK_EXTTYPE_NOTHING:
                extHeadSize = 0;
                break;
            }
            int headSize = distHeadSize + baseHeadSize + extHeadSize;
            _TAG_NETPACK_ENCRYPT_CONTEXT encryptContext = new _TAG_NETPACK_ENCRYPT_CONTEXT();

            encryptContext._encrypt = DecDefines.NETPACK_ENCRYPT_NOTHING;
            ushort dataSize = Helpers.GetEncryptStoreSize(encryptContext._encrypt, validSize);
            short  packSize = (short)(headSize + dataSize);

            _TAG_NETPACK_DISTINGUISHHEAD_VER1 ver1head = new _TAG_NETPACK_DISTINGUISHHEAD_VER1();

            ver1head._dist       = distHead;
            ver1head._packtype   = packType;
            ver1head._followsize = (ushort)(packSize - distHeadSize);
            ver1head._source     = mEndpointID;
            ver1head._target     = 0xffffffffffffffff;
            ver1head._timestamp  = (ulong)DateTime.Now.Ticks;
            ver1head._basehead   = baseHeadType;
            ver1head._basesize   = baseHeadSize;
            ver1head._exthead    = extHeadType;
            ver1head._extsize    = extHeadSize;
            ver1head._datasize   = dataSize;
            ver1head._state      = 0;
            ver1head._moduleid   = mModuleType;
            ver1head._number     = mModuleNumber;
            ver1head._timestamp  = (ulong)DateTime.Now.Ticks;
            return(ver1head);
        }