Beispiel #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}");
            }
        }
Beispiel #2
0
        /// <summary>
        /// 發送SSO訊息至伺服器。本接口不會阻塞等待。
        /// </summary>
        /// <param name="service">服務名</param>
        /// <param name="packet">請求數據</param>
        /// <param name="ssoSequence">SSO序列號</param>
        /// <returns></returns>
        internal uint PostMessage(Service service, Packet packet, uint ssoSequence)
        {
            var ssoMessage = new SsoMessage(ssoSequence, _ssoSession, service.name, packet);
            var toService  = new ToServiceMessage(10, 2, _msfCore._uin, ssoMessage);

            _pakMan.Emit(toService);
            return(ssoSequence);
        }
Beispiel #3
0
        /// 發送SSO訊息至伺服器。本接口不會阻塞等待。
        /// </summary>
        /// <param name="service">服務名</param>
        /// <param name="packet">請求數據</param>
        /// <param name="ssoSequence">SSO序列號</param>
        /// <returns></returns>
        public uint PostMessage(Service service, ByteBuffer packet, uint ssoSequence)
        {
            var ssoMessage = new SsoMessage(ssoSequence, _ssoSession, service.name, _tgtToken, packet);
            var toService  = new ToServiceMessage(10, _msfCore.SigInfo.Uin, _d2Token, _d2Key, ssoMessage);

            _pakMan.Emit(toService);
            return(ssoSequence);
        }
Beispiel #4
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}");
            }
        }