diff --git a/24Hour/Controllers/Common/WebSocketController.cs b/24Hour/Controllers/Common/WebSocketController.cs index 46196f7..f61b3e7 100644 --- a/24Hour/Controllers/Common/WebSocketController.cs +++ b/24Hour/Controllers/Common/WebSocketController.cs @@ -123,74 +123,71 @@ namespace _24Hour.Controllers.Common { //获取发送人连接 var socket = CONNECT_POOL.Where(q => q.Key == _userdata.Id).Select(q => q.Value).First(); - while (true) + if (socket.State == WebSocketState.Open) { - if (socket.State == WebSocketState.Open) - { - ArraySegment buffer = new ArraySegment(new byte[2048]); - //WebSocketReceiveResult ret = await socket.ReceiveAsync(buffer, CancellationToken.None); + ArraySegment buffer = new ArraySegment(new byte[2048]); + //WebSocketReceiveResult ret = await socket.ReceiveAsync(buffer, CancellationToken.None); - #region 消息处理(消息转发) - try + #region 消息处理(消息转发) + try + { + #region 关闭Socket处理,删除连接池 + if (socket.State != WebSocketState.Open)//连接关闭 { - #region 关闭Socket处理,删除连接池 - if (socket.State != WebSocketState.Open)//连接关闭 - { - if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);//删除连接池 - break; - } - #endregion + if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);//删除连接池 + break; + } + #endregion - #region 消息发送 - var content = JsonConvert.SerializeObject(Sendingdata); - buffer = new ArraySegment(Encoding.UTF8.GetBytes(content)); + #region 消息发送 + var content = JsonConvert.SerializeObject(Sendingdata); + buffer = new ArraySegment(Encoding.UTF8.GetBytes(content)); - if (CONNECT_POOL.ContainsKey(Sendingdata.recipient))//判断客户端是否在线 + if (CONNECT_POOL.ContainsKey(Sendingdata.recipient))//判断客户端是否在线 + { + WebSocket destSocket = CONNECT_POOL[Sendingdata.recipient];//目的客户端 + if (destSocket != null && destSocket.State == WebSocketState.Open) { - WebSocket destSocket = CONNECT_POOL[Sendingdata.recipient];//目的客户端 - if (destSocket != null && destSocket.State == WebSocketState.Open) - { - result.IsSucceed = true; - result.result = "已发送"; + result.IsSucceed = true; + result.result = "已发送"; - await destSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); - } - else - { - result.IsSucceed = false; - result.result = "用户未上线!"; - } + await destSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); } else { result.IsSucceed = false; result.result = "用户未上线!"; - //添加未读 - //添加一条未读消息 - //Task.Run(() => - //{ - // if (!MESSAGE_POOL.ContainsKey(descUser))//将用户添加至离线消息池中 - // MESSAGE_POOL.Add(descUser, new List()); - // MESSAGE_POOL[descUser].Add(new MessageInfo(DateTime.Now, buffer));//添加离线消息 - //}); } - #endregion } - catch (Exception exs) + else { result.IsSucceed = false; - result.result = "异常:"+ exs.Message+ ""; - //消息转发异常处理,本次消息忽略 继续监听接下来的消息 + result.result = "用户未上线!"; + //添加未读 + //添加一条未读消息 + //Task.Run(() => + //{ + // if (!MESSAGE_POOL.ContainsKey(descUser))//将用户添加至离线消息池中 + // MESSAGE_POOL.Add(descUser, new List()); + // MESSAGE_POOL[descUser].Add(new MessageInfo(DateTime.Now, buffer));//添加离线消息 + //}); } #endregion } - else + catch (Exception exs) { result.IsSucceed = false; - result.result = " 重新连接!"; + result.result = "异常:" + exs.Message + ""; + //消息转发异常处理,本次消息忽略 继续监听接下来的消息 } - }//while end + #endregion + } + else + { + result.IsSucceed = false; + result.result = " 重新连接!"; + } } catch (Exception ex) { @@ -321,12 +318,12 @@ namespace _24Hour.Controllers.Common } #endregion - lock (obj) + lock (obj) { #region 消息发送 var content = ""; //data.type等于1 为视频推送 - if (Senddata.typenum == "1" && Senddata.deviceno.NotNull()) + if (Senddata.typenum == "1" && Senddata.deviceno.NotNull()) { //设备视频流地址存放 Addressda Address = new Addressda(); @@ -386,8 +383,8 @@ namespace _24Hour.Controllers.Common else socketSend.content = data.deviceAddress; if (!socketSend.content.NotNull()) bol = false; - //对象序列化 - var dqcontent = JsonConvert.SerializeObject(socketSend); + //对象序列化 + var dqcontent = JsonConvert.SerializeObject(socketSend); var dqbuffer = new ArraySegment(Encoding.UTF8.GetBytes(dqcontent)); //当前用户socket发送 if (bol)