/// <summary> /// 创建一个Web套接字 并初始化事件注册 /// </summary> /// <param name="clientId"></param> /// <param name="socketAddr"></param> /// <returns></returns> private UserWebSocket InitOneCaiNiaoSocket(string clientId, string socketAddr) { WebSocket socket = null; if (string.IsNullOrEmpty(socketAddr)) { socket = new WebSocket(CAI_NIAO_SOCKET_ADDRESS); } else { socket = new WebSocket(socketAddr); } //绑定属性 socket.ClientBindingId = clientId; //注册事件 socket.OnOpen += Socket_OnOpen; socket.OnClose += Socket_OnClose; socket.OnMessage += Socket_OnMessage; socket.OnError += Socket_OnError; var userSocket = new UserWebSocket(clientId, socket); userSocket.LastAccessTime = DateTime.Now; userSocket.CallBackForCheckClientStatus += UserSocket_CallBackForCheckClientStatus; UserWebSocketResolver.AddUserSocketToDic(userSocket); return(userSocket); }
/// <summary> /// 接收来自客户端的消息 /// 确认自身仍在激活中 /// </summary> /// <param name="clientId"></param> /// <param name="messageId"></param> public void GiveMoneyToHouseOwner(string clientId, string messageId) { if (string.IsNullOrEmpty(clientId) || string.IsNullOrEmpty(messageId)) { return; } //通知回收器,这个还再激活使用中 UserWebSocketResolver.OnReceiveMessageFromClient(clientId, messageId); }
/// <summary> /// 处理客户端的消息 /// </summary> /// <param name="clientId"></param> /// <param name="socketAddr"></param> /// <param name="message"></param> private void ProcessClientMessage(string clientId, string socketAddr, string message) { if (this.ValidateRequest(clientId) == false) { return; } var userSocket = UserWebSocketResolver.GetUserSocketFromDic(clientId); if (null == userSocket) { userSocket = InitOneCaiNiaoSocket(clientId, socketAddr); } if (userSocket.Socket.ReadyState != WebSocketState.Open) { try { userSocket.Socket.Connect();//连接到指定的套接字接口 } catch (Exception ex) { SmartClient.Common.Logger.Error(ex); var msg = new CustomMessage { data = string.Format("未能正确连接到Socket连接对象!套接字连接地址:{0}.错误信息:{2}.", userSocket.Socket.Url, ex.Message) }; Clients.Caller.onerror(msg); return; } } try { userSocket.Socket.Send(message); } catch (Exception ex) { SmartClient.Common.Logger.Error(ex); var msg = new CustomMessage { data = "未能正确发送消息到指定的Socket连接对象!错误信息:" + ex.ToString() }; Clients.Caller.onerror(msg); } }