Browse Source

websocket消息发送接口调整

master
liujiaqiang 2 years ago
parent
commit
22446f71b2
  1. 93
      24Hour/Controllers/Common/WebSocketController.cs

93
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(); 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<byte> buffer = new ArraySegment<byte>(new byte[2048]);
{ //WebSocketReceiveResult ret = await socket.ReceiveAsync(buffer, CancellationToken.None);
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[2048]);
//WebSocketReceiveResult ret = await socket.ReceiveAsync(buffer, CancellationToken.None);
#region 消息处理(消息转发) #region 消息处理(消息转发)
try try
{
#region 关闭Socket处理,删除连接池
if (socket.State != WebSocketState.Open)//连接关闭
{ {
#region 关闭Socket处理,删除连接池 if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);//删除连接池
if (socket.State != WebSocketState.Open)//连接关闭 break;
{ }
if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);//删除连接池 #endregion
break;
}
#endregion
#region 消息发送 #region 消息发送
var content = JsonConvert.SerializeObject(Sendingdata); var content = JsonConvert.SerializeObject(Sendingdata);
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(content)); buffer = new ArraySegment<byte>(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];//目的客户端 result.IsSucceed = true;
if (destSocket != null && destSocket.State == WebSocketState.Open) result.result = "已发送";
{
result.IsSucceed = true;
result.result = "已发送";
await destSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); await destSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
}
else
{
result.IsSucceed = false;
result.result = "用户未上线!";
}
} }
else else
{ {
result.IsSucceed = false; result.IsSucceed = false;
result.result = "用户未上线!"; result.result = "用户未上线!";
//添加未读
//添加一条未读消息
//Task.Run(() =>
//{
// if (!MESSAGE_POOL.ContainsKey(descUser))//将用户添加至离线消息池中
// MESSAGE_POOL.Add(descUser, new List<MessageInfo>());
// MESSAGE_POOL[descUser].Add(new MessageInfo(DateTime.Now, buffer));//添加离线消息
//});
} }
#endregion
} }
catch (Exception exs) else
{ {
result.IsSucceed = false; result.IsSucceed = false;
result.result = "异常:"+ exs.Message+ ""; result.result = "用户未上线!";
//消息转发异常处理,本次消息忽略 继续监听接下来的消息 //添加未读
//添加一条未读消息
//Task.Run(() =>
//{
// if (!MESSAGE_POOL.ContainsKey(descUser))//将用户添加至离线消息池中
// MESSAGE_POOL.Add(descUser, new List<MessageInfo>());
// MESSAGE_POOL[descUser].Add(new MessageInfo(DateTime.Now, buffer));//添加离线消息
//});
} }
#endregion #endregion
} }
else catch (Exception exs)
{ {
result.IsSucceed = false; result.IsSucceed = false;
result.result = " 重新连接!"; result.result = "异常:" + exs.Message + "";
//消息转发异常处理,本次消息忽略 继续监听接下来的消息
} }
}//while end #endregion
}
else
{
result.IsSucceed = false;
result.result = " 重新连接!";
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -326,7 +323,7 @@ namespace _24Hour.Controllers.Common
#region 消息发送 #region 消息发送
var content = ""; var content = "";
//data.type等于1 为视频推送 //data.type等于1 为视频推送
if (Senddata.typenum == "1" && Senddata.deviceno.NotNull()) if (Senddata.typenum == "1" && Senddata.deviceno.NotNull())
{ {
//设备视频流地址存放 //设备视频流地址存放
Addressda Address = new Addressda(); Addressda Address = new Addressda();
@ -386,8 +383,8 @@ namespace _24Hour.Controllers.Common
else else
socketSend.content = data.deviceAddress; socketSend.content = data.deviceAddress;
if (!socketSend.content.NotNull()) bol = false; if (!socketSend.content.NotNull()) bol = false;
//对象序列化 //对象序列化
var dqcontent = JsonConvert.SerializeObject(socketSend); var dqcontent = JsonConvert.SerializeObject(socketSend);
var dqbuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(dqcontent)); var dqbuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(dqcontent));
//当前用户socket发送 //当前用户socket发送
if (bol) if (bol)

Loading…
Cancel
Save