|
|
@ -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) |
|
|
|