protected override void OnMessage(MessageEventArgs e) { if (e.IsPing) { WsRoot.MinerStudioSessionSet.ActiveByWsSessionId(base.ID, out _); return; } WsMessage message = e.ToWsMessage <WsMessage>(); if (message == null) { return; } if (!WsRoot.MinerStudioSessionSet.TryGetByWsSessionId(this.ID, out IMinerStudioSession minerSession)) { this.CloseAsync(CloseStatusCode.Normal, "意外,会话不存在,请重新连接"); return; } if (!minerSession.IsValid(message)) { this.CloseAsync(CloseStatusCode.Normal, "意外,签名验证失败,请重新连接"); return; } if (message.Type == WsMessage.QueryClientDatas) { if (message.TryGetData(out QueryClientsRequest query)) { // 走的内网,因为WsServer启动时会设置内网Rpc地址 RpcRoot.OfficialServer.ClientDataBinaryService.QueryClientsForWsAsync(QueryClientsForWsRequest.Create(query, minerSession.LoginName), (QueryClientsResponse response, Exception ex) => { if (response.IsSuccess()) { var userData = WsRoot.ReadOnlyUserSet.GetUser(UserId.CreateLoginNameUserId(minerSession.LoginName)); if (userData != null) { this.SendAsync(new WsMessage(Guid.NewGuid(), WsMessage.ClientDatas) { Data = response }.SignToBytes(userData.Password), completed: null); } } }); } return; } if (MinerStudioWsMessageHandler.TryGetHandler(message.Type, out Action <string, WsMessage> handler)) { try { handler.Invoke(minerSession.LoginName, message); } catch (Exception ex) { Logger.ErrorDebugLine(ex); } } else { NTMinerConsole.UserWarn($"{_behaviorName} {nameof(OnMessage)} Received InvalidType {e.Data}"); } }
public static void HandleMinerStudioMessage(IWsSessionAdapter session, WsMessage message) { if (message == null) { return; } if (!WsRoot.MinerStudioSessionSet.TryGetByWsSessionId(session.SessionId, out IMinerStudioSession minerSession)) { session.CloseAsync(WsCloseCode.Normal, "意外,会话不存在,请重新连接"); return; } if (!minerSession.IsValid(message)) { session.CloseAsync(WsCloseCode.Normal, "意外,签名验证失败,请重新连接"); return; } if (message.Type == WsMessage.QueryClientDatas) { if (message.TryGetData(out QueryClientsRequest query)) { // 走的内网,因为WsServer启动时会设置内网Rpc地址 RpcRoot.OfficialServer.ClientDataBinaryService.QueryClientsForWsAsync(QueryClientsForWsRequest.Create(query, minerSession.LoginName), (QueryClientsResponse response, Exception ex) => { if (response.IsSuccess()) { var userData = WsRoot.ReadOnlyUserSet.GetUser(UserId.CreateLoginNameUserId(minerSession.LoginName)); if (userData != null) { session.SendAsync(new WsMessage(Guid.NewGuid(), WsMessage.ClientDatas) { Data = response }.SignToBytes(userData.Password)); } } }); } return; } if (MinerStudioWsMessageHandler.TryGetHandler(message.Type, out Action <string, WsMessage> handler)) { try { handler.Invoke(minerSession.LoginName, message); } catch (Exception ex) { Logger.ErrorDebugLine(ex); } } else { NTMinerConsole.UserWarn($"{session.TypeName} {nameof(HandleMinerStudioMessage)} Received InvalidType {message.Type}"); } }