/// <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}"); } }
/// <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); }
/// 發送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); }
/// <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}"); } }