/// <summary> /// 发送消息给指定用户 /// </summary> /// <typeparam name="T">数据类型</typeparam> /// <param name="userInfo">用户信息</param> /// <param name="channel">推送频道</param> /// <param name="data">推送数据</param> public void Publish <T>(UserInfo userInfo, string channel, T data) { if (ConnectionPool.ContainsKey(userInfo.UserId)) { foreach (var session in ConnectionPool[userInfo.UserId]) { Publish(session, channel, data); } } }
/// <summary> /// 关闭连接 /// </summary> /// <param name="session">连接信息</param> /// <param name="reason">关闭原因</param> private void SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason reason) { //关闭连接 var userName = GetUserInfo(session).UserId; if (ConnectionPool.ContainsKey(userName)) { ConnectionPool[userName].Remove(session); } }
/// <summary> /// 查找指定ID号的通信通道 /// </summary> /// <param name="handlerid">ID号</param> /// <returns>如找到,则返回该通道,否则返回空</returns> public ClientHandler FindHandler(int handlerid) { if (ConnectionPool.ContainsKey(handlerid)) { return(ConnectionPool[handlerid]); } else { return(null); } }
/// <summary> /// 加入连接 /// </summary> /// <param name="session">连接信息</param> private void SessionConnected(WebSocketSession session) { var userId = GetUserInfo(session).UserId; lock (ConnectionPool) { if (!ConnectionPool.ContainsKey(userId)) { ConnectionPool.Add(userId, new List <WebSocketSession>()); } } ConnectionPool[userId].Add(session); }