예제 #1
0
        /// <summary>
        /// 處理來自伺服器發送的SSO訊息, 並派遣到對應的服務路由
        /// </summary>
        /// <param name="fromService"></param>
        public void OnFromServiceMessage(FromServiceMessage fromService)
        {
            try
            {
                var ssoData = fromService.TakeAllBytes(out byte[] _);

                SsoMessage ssoMessage = null;
                switch (fromService._encryptType)
                {
                case 0:
                    ssoMessage = new SsoMessage(ssoData);
                    break;

                case 1:
                    ssoMessage = new SsoMessage(ssoData, _d2Key);
                    break;

                case 2:
                    ssoMessage = new SsoMessage(ssoData, _msfCore.SigInfo.ZeroKey);
                    break;
                }

                Console.WriteLine($"  [ssoMessage] ssoSeq => {ssoMessage.ssoHeader.ssoSequence}");
                Console.WriteLine($"  [ssoMessage] ssoSession => {ssoMessage.ssoHeader.ssoSession}");
                Console.WriteLine($"  [ssoMessage] ssoCommand => {ssoMessage.ssoHeader.ssoCommand}");

                Service.Handle(_msfCore, ssoMessage.ssoHeader.ssoCommand, ssoMessage.ssoWupBuffer);
            }
            catch (Exception e)
            {
                Console.WriteLine($"Unknown message.\n{e.StackTrace}");
            }
        }
예제 #2
0
        private void OnPacket(byte[] data)
        {
            var serviceMessage = new FromServiceMessage(data);

            Console.WriteLine($"Recv =>\n{Hex.Bytes2HexStr(data)}\n");
            Console.WriteLine($"  [ToService] len =>\n{serviceMessage._length}\n");
            Console.WriteLine($"  [ToService] packetType =>\n{serviceMessage._packetType}\n");
            Console.WriteLine($"  [ToService] encryptType =>\n{serviceMessage._encryptType}\n");
            Console.WriteLine($"  [ToService] uinString =>\n{serviceMessage._uinString}\n");

            _ssoMan.OnFromServiceMessage(serviceMessage);
        }
예제 #3
0
        /// <summary>
        /// 處理來自伺服器發送的SSO訊息, 並派遣到對應的服務路由
        /// </summary>
        /// <param name="fromService"></param>
        internal void OnFromServiceMessage(FromServiceMessage fromService)
        {
            var ssoMessage = new SsoMessage(fromService.GetBytes(), _msfCore._keyRing._zeroKey);

            _ssoSequence = ssoMessage._header._ssoSequence;
            _ssoSession  = ssoMessage._header._ssoSession;

            Console.WriteLine($"  [ssoMessage] ssoSeq =>\n{ssoMessage._header._ssoSequence}\n");
            Console.WriteLine($"  [ssoMessage] ssoSession =>\n{ssoMessage._header._ssoSession}\n");
            Console.WriteLine($"  [ssoMessage] ssoCommand =>\n{ssoMessage._header._ssoCommand}\n");

            try
            {
                Service.Handle(_msfCore, ssoMessage._header._ssoCommand, ssoMessage);
            }
            catch (Exception e)
            {
                Console.WriteLine($"Unknown message.\n{e.StackTrace}");
            }
        }