コード例 #1
0
        protected override void OnMessage(MessageEventArgs e)
        {
            base.OnMessage(e);
            if (e.IsPing)
            {
                WsCommonService.ActiveMinerStudioSession(base.SessionId);
                return;
            }
            WsMessage wsMessage = e.ToWsMessage <WsMessage>();

            WsCommonService.HandleMinerStudioMessage(this, wsMessage);
        }
コード例 #2
0
 public static T ToWsMessage <T>(this MessageEventArgs e) where T : WsMessage
 {
     // IsPing、IsBinary、IsText三者是互斥的,经查源码实际上是判断一个Opcode枚举类型的值
     if (e.IsPing)
     {
         throw new InvalidProgramException("Ping消息不应走到这一步");
     }
     if (e.IsBinary)
     {
         return(VirtualRoot.BinarySerializer.Deserialize <T>(e.RawData));
     }
     else
     {
         return(WsCommonService.ParseWsMessage <T>(e.Data));
     }
 }
コード例 #3
0
 public SharpWsServer(IHostConfig config)
 {
     _wsServer = new WebSocketServer($"ws://0.0.0.0:{config.GetServerPort().ToString()}")
     {
         KeepClean             = true,
         AuthenticationSchemes = AuthenticationSchemes.Basic, // 用基本验证字段承载签名信息,因为传输的并非原始密码,所以虽然是基本验证但不存在安全问题
         UserCredentialsFinder = id => {
             string base64String = id.Name;
             if (!WsRoot.TryGetUser(base64String, out WsUserName wsUserName, out UserData userData, out string _))
             {
                 return(null);
             }
             string password = WsCommonService.GetUserPassword(wsUserName, userData);
             password = HashUtil.Sha1(base64String + password);
             // 经验证username对于基本验证来说没有用
             return(new NetworkCredential(userData.LoginName, password, domain: null, roles: wsUserName.ClientType.GetName()));
         }
     };
     _wsServer.AddWebSocketService <MinerClientSharpWsSessionAdapter>(WsRoot.MinerClientPath);
     _wsServer.AddWebSocketService <MinerStudioSharpWsSessionAdapter>(WsRoot.MinerStudioPath);
     MinerClientWsSessionsAdapter = new SharpWsSessionsAdapter(_wsServer.WebSocketServices[WsRoot.MinerClientPath].Sessions);
     MinerStudioWsSessionsAdapter = new SharpWsSessionsAdapter(_wsServer.WebSocketServices[WsRoot.MinerStudioPath].Sessions);
 }
コード例 #4
0
 protected override void OnClose(CloseEventArgs e)
 {
     base.OnClose(e);
     WsCommonService.RemoveMinerStudioSession(base.SessionId);
 }
コード例 #5
0
 // 查源码可知基类的OnOpen、OnMessage、OnError、OnClose都是空,调用基类对应方法是为了避免第三方代码将来改动
 protected override void OnOpen()
 {
     base.OnOpen();
     WsCommonService.AddMinerStudioSession(this);
 }