Browse Source

添加WebSocket服务连接

master
liujiaqiang 2 years ago
parent
commit
9dc290fb5a
  1. 234
      24Hour/Controllers/Common/WebSocketController.cs
  2. 52
      24Hour/Controllers/system/SystemControllerController.cs
  3. 4
      Elight.Logic/CurrencyDelete.cs

234
24Hour/Controllers/Common/WebSocketController.cs

@ -3,23 +3,27 @@ using Elight.Logic;
using Elight.Utility;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
using System.Net.WebSockets;
using System.Text;
namespace _24Hour.Controllers.Common
{
//[Authorize]
[Authorize]
public class WebSocketController : Controller
{
//private readonly SqlSugarClient _db;//数据库
//App_Sys_UserModel _userdata = new App_Sys_UserModel();//当前用户
//private readonly ILogger<LoginController> _logger;//日志
//public WebSocketController(ILogger<LoginController> logger, SqlSugarClient db, User user)
//{
// _logger = logger;
// _db = db;
// _userdata = user.Userdata();
//}
private readonly SqlSugarClient _db;//数据库
App_Sys_UserModel _userdata = new App_Sys_UserModel();//当前用户
private readonly ILogger<LoginController> _logger;//日志
private static Dictionary<string, WebSocket> CONNECT_POOL = new Dictionary<string, WebSocket>();//用户连接池
//private static Dictionary<string, List<MessageInfo>> MESSAGE_POOL = new Dictionary<string, List<MessageInfo>>();//离线消息池
public WebSocketController(ILogger<LoginController> logger, SqlSugarClient db, User user)
{
_logger = logger;
_db = db;
_userdata = user.Userdata();
}
[HttpGet("/ws")]
public async Task WebSocketServer()
{
@ -28,32 +32,202 @@ namespace _24Hour.Controllers.Common
try
{
var socket = await HttpContext.WebSockets.AcceptWebSocketAsync();
//ProcessChat(socket);
ProcessChat(socket);
}
catch (Exception ex)
{
}
}
}
//private async Task ProcessChat(WebSockets context)
//{
// WebSocket socket = context.WebSocket;
// while (true)
// {
// if (socket.State == WebSocketState.Open)
// {
// ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[2048]);
// WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
// string userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
// userMsg = "你发送了:" + userMsg + "于" + DateTime.Now.ToLongTimeString();
// buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMsg));
// await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
// }
// else
private async Task ProcessChat(WebSocket socket)
{
string user = _userdata.Id;
try
{
#region 用户添加连接池
//第一次open时,添加到连接池中
if (!CONNECT_POOL.ContainsKey(user))
CONNECT_POOL.Add(user, socket);//不存在,添加
else
if (socket != CONNECT_POOL[user])//当前对象不一致,更新
CONNECT_POOL[user] = socket;
#endregion
string descUser = string.Empty;//目的用户
while (true)
{
if (socket.State == WebSocketState.Open)
{
}
else
{
break;
}
}//while end
}
catch (Exception ex)
{
//整体异常处理
if (CONNECT_POOL.ContainsKey(user)) CONNECT_POOL.Remove(user);
}
}
/// <summary>
/// 消息发送
/// </summary>
/// <param name="Sendingdata"></param>
/// <returns></returns>
[HttpPost]
[Route("WebSocketSend")]
public async Task WebSocketSend(WebSocketSending Sendingdata)
{
try
{
//获取发送人连接
var socket = CONNECT_POOL.Where(q => q.Key == _userdata.Id).Select(q => q.Value).First();
while (true)
{
if (socket.State == WebSocketState.Open)
{
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[2048]);
WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
#region 消息处理(消息转发)
try
{
#region 关闭Socket处理,删除连接池
if (socket.State != WebSocketState.Open)//连接关闭
{
if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);//删除连接池
break;
}
#endregion
#region 消息发送
var content = JsonConvert.SerializeObject(Sendingdata);
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(content));
if (CONNECT_POOL.ContainsKey(Sendingdata.recipient))//判断客户端是否在线
{
WebSocket destSocket = CONNECT_POOL[Sendingdata.recipient];//目的客户端
if (destSocket != null && destSocket.State == WebSocketState.Open)
await destSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
else
{
//添加未读
}
}
else
{
//添加未读
//添加一条未读消息
//Task.Run(() =>
//{
// break;
// }
// }
//}
// 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)
{
//消息转发异常处理,本次消息忽略 继续监听接下来的消息
}
#endregion
}
else
{
}
}//while end
}
catch (Exception)
{
//整体异常处理
if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);
}
}
/// <summary>
/// 消息发送
/// </summary>
/// <param name="Sendingdata"></param>
/// <returns></returns>
[HttpPost]
[Route("text")]
public async Task text(WebSocketSending Sendingdata)
{
try
{
//获取发送人连接
var socket = CONNECT_POOL.Where(q => q.Key == _userdata.Id).Select(q => q.Value).First();
while (true)
{
if (socket.State == WebSocketState.Open)
{
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[2048]);
WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
#region 消息处理(消息转发)
try
{
#region 关闭Socket处理,删除连接池
if (socket.State != WebSocketState.Open)//连接关闭
{
if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);//删除连接池
break;
}
#endregion
#region 消息发送
var content = JsonConvert.SerializeObject(Sendingdata);
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(content));
await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
#endregion
}
catch (Exception exs)
{
//消息转发异常处理,本次消息忽略 继续监听接下来的消息
}
#endregion
}
else
{
}
}//while end
}
catch (Exception)
{
//整体异常处理
if (CONNECT_POOL.ContainsKey(_userdata.Id)) CONNECT_POOL.Remove(_userdata.Id);
}
}
}
/// <summary>
/// 消息发送
/// </summary>
public class WebSocketSending
{
/// <summary>
/// 发送人
/// </summary>
public string? sender { get; set; }
/// <summary>
/// 发送内容
/// </summary>
public string? content { get; set; }
/// <summary>
/// 接收人
/// </summary>
public string? recipient { get; set; }
/// <summary>
/// 类型 0:消息,1:视频地址
/// </summary>
public string? type { get; set; }
}
}

52
24Hour/Controllers/system/SystemControllerController.cs

@ -43,10 +43,10 @@ namespace _24Hour.Controllers.system
public async Task<Result> QueryUser0(App_Sys_UserInput UserModel)
{
var list = await _db.Queryable<App_Sys_UserModel>()
.WhereIF(!UserModel.name.IsNullOrEmpty(), q => q.name.Contains(UserModel.name))
.WhereIF(!UserModel.phone.IsNullOrEmpty(), q => q.phone.Contains(UserModel.phone))
.WhereIF(!UserModel.duties.IsNullOrEmpty(), q => q.duties.Contains(UserModel.duties))
.WhereIF(!UserModel.cardId.IsNullOrEmpty(), q => q.cardId.Contains(UserModel.cardId))
.WhereIF(!UserModel.name.IsNull(), q => q.name.Contains(UserModel.name))
.WhereIF(!UserModel.phone.IsNull(), q => q.phone.Contains(UserModel.phone))
.WhereIF(!UserModel.duties.IsNull(), q => q.duties.Contains(UserModel.duties))
.WhereIF(!UserModel.cardId.IsNull(), q => q.cardId.Contains(UserModel.cardId))
.Where(q => q.IsDeleted == 0 && q.usertype == 0)
.ToPageListAsync(UserModel.PageIndex, UserModel.PageSize);
var data = new QueryResult<App_Sys_UserModel>(UserModel, list);
@ -65,10 +65,10 @@ namespace _24Hour.Controllers.system
public async Task<Result> QueryUser1(App_Sys_UserInput UserModel)
{
var list = await _db.Queryable<App_Sys_UserModel>()
.WhereIF(!UserModel.name.IsNullOrEmpty(), q => q.name.Contains(UserModel.name))
.WhereIF(!UserModel.phone.IsNullOrEmpty(), q => q.phone.Contains(UserModel.phone))
.WhereIF(!UserModel.duties.IsNullOrEmpty(), q => q.duties.Contains(UserModel.duties))
.WhereIF(!UserModel.cardId.IsNullOrEmpty(), q => q.cardId.Contains(UserModel.cardId))
.WhereIF(!UserModel.name.IsNull(), q => q.name.Contains(UserModel.name))
.WhereIF(!UserModel.phone.IsNull(), q => q.phone.Contains(UserModel.phone))
.WhereIF(!UserModel.duties.IsNull(), q => q.duties.Contains(UserModel.duties))
.WhereIF(!UserModel.cardId.IsNull(), q => q.cardId.Contains(UserModel.cardId))
.Where(q => q.IsDeleted == 0 && q.usertype == 1).ToPageListAsync(UserModel.PageIndex, UserModel.PageSize);
var data = new QueryResult<App_Sys_UserModel>(UserModel, list);
result.IsSucceed = true;
@ -239,7 +239,7 @@ namespace _24Hour.Controllers.system
{
var totalCount = 0;
var list = await _db.Queryable<App_Sys_RoleModel>()
.WhereIF(!string.IsNullOrEmpty(roledata.name), q => q.name.Contains(roledata.name))
.WhereIF(roledata.name.NotNull(), q => q.name.Contains(roledata.name))
.Where(q => q.IsDeleted == 0).ToPageListAsync(roledata.PageIndex, roledata.PageSize);
var data = new QueryResult<App_Sys_RoleModel>(roledata, list);
result.IsSucceed = true;
@ -358,7 +358,7 @@ namespace _24Hour.Controllers.system
{
var totalCount = 0;
var list = await _db.Queryable<App_Sys_RoleMenuModel>()
.WhereIF(!roledata.roleId.IsNullOrEmpty(), q => q.roleId == roledata.roleId)
.WhereIF(!roledata.roleId.IsNull(), q => q.roleId == roledata.roleId)
.Where(q => q.IsDeleted == 0).Select(x => x.menuId).ToListAsync();
//roledata.PageCount = totalCount;
//var data = new QueryResult<App_Sys_RoleModel>(roledata, list);
@ -452,7 +452,7 @@ namespace _24Hour.Controllers.system
var totalCount = 0;
//获取角色下得所有用户id
var list = await _db.Queryable<App_Sys_RoleUserModel>()
.WhereIF(!string.IsNullOrEmpty(roledata.roleId), q => q.roleId == roledata.roleId)
.WhereIF(roledata.roleId.IsNull(), q => q.roleId == roledata.roleId)
.Where(q => q.IsDeleted == 0).Select(x => x.roleuserId).ToListAsync();
//roledata.PageCount = totalCount;
//var data = new QueryResult<App_Sys_RoleMenuModel>(roledata, list);
@ -544,9 +544,9 @@ namespace _24Hour.Controllers.system
public async Task<Result> QueryUnitlist(App_Sys_UnitInput Unitdata)
{
var list = await _db.Queryable<App_Sys_UnitModel>()
.WhereIF(!Unitdata.unitCode.IsNullOrEmpty(), q => q.unitCode.Contains(Unitdata.unitCode))
.WhereIF(!Unitdata.unitname.IsNullOrEmpty(), q => q.unitname.Contains(Unitdata.unitname))
.WhereIF(!Unitdata.unitjc.IsNullOrEmpty(), q => q.unitjc.Contains(Unitdata.unitjc))
.WhereIF(!Unitdata.unitCode.IsNull(), q => q.unitCode.Contains(Unitdata.unitCode))
.WhereIF(!Unitdata.unitname.IsNull(), q => q.unitname.Contains(Unitdata.unitname))
.WhereIF(!Unitdata.unitjc.IsNull(), q => q.unitjc.Contains(Unitdata.unitjc))
.Where(q => q.IsDelete == 0).ToListAsync();
result.IsSucceed = true;
result.result = list;
@ -562,9 +562,9 @@ namespace _24Hour.Controllers.system
public async Task<Result> QueryUnitTree(App_Sys_UnitInput Unitdata)
{
var treelist = await _db.Queryable<App_Sys_UnitTree>()
.WhereIF(!Unitdata.unitCode.IsNullOrEmpty(), q => q.unitCode.Contains(Unitdata.unitCode))
.WhereIF(!Unitdata.unitname.IsNullOrEmpty(), q => q.unitname.Contains(Unitdata.unitname))
.WhereIF(!Unitdata.unitjc.IsNullOrEmpty(), q => q.unitjc.Contains(Unitdata.unitjc))
.WhereIF(!Unitdata.unitCode.IsNull(), q => q.unitCode.Contains(Unitdata.unitCode))
.WhereIF(!Unitdata.unitname.IsNull(), q => q.unitname.Contains(Unitdata.unitname))
.WhereIF(!Unitdata.unitjc.IsNull(), q => q.unitjc.Contains(Unitdata.unitjc))
.WhereIF(Unitdata.StartTime != null && Unitdata.EndTime != null, q => q.createtime >= Unitdata.StartTime && q.createtime < Unitdata.EndTime.Value.AddDays(1))
.Where(q => q.IsDelete == 0).ToTreeAsync(it => it.children, it => it.pid, null);
result.IsSucceed = true;
@ -710,7 +710,9 @@ namespace _24Hour.Controllers.system
{
var totalCount = 0;
var list = await _db.Queryable<App_Sys_DepartModel>()
.WhereIF(!unitId.IsNullOrEmpty(), q => q.unitId.Contains(unitId))
.WhereIF(!unitId.IsNull(), q => q.unitId.Contains(unitId))
.WhereIF(!unitId.IsNull(), q => q.unitId.Contains(unitId))
.WhereIF(!unitId.IsNull(), q => q.unitId.Contains(unitId))
.Where(q => q.IsDelete == 0).ToListAsync();
result.IsSucceed = true;
result.result = list;
@ -726,10 +728,10 @@ namespace _24Hour.Controllers.system
public async Task<Result> QueryDepart(App_Sys_DepartInput Departdata)
{
var list = await _db.Queryable<App_Sys_DepartModel>()
.WhereIF(!Departdata.departCode.IsNullOrEmpty(), q => q.departCode.Contains(Departdata.departCode))
.WhereIF(!Departdata.departjc.IsNullOrEmpty(), q => q.departjc.Contains(Departdata.departjc))
.WhereIF(!Departdata.departname.IsNullOrEmpty(), q => q.departname.Contains(Departdata.departname))
.WhereIF(!Departdata.unitId.IsNullOrEmpty(), q => q.unitId.Contains(Departdata.unitId))
.WhereIF(!Departdata.departCode.IsNull(), q => q.departCode.Contains(Departdata.departCode))
.WhereIF(!Departdata.departjc.IsNull(), q => q.departjc.Contains(Departdata.departjc))
.WhereIF(!Departdata.departname.IsNull(), q => q.departname.Contains(Departdata.departname))
.WhereIF(!Departdata.unitId.IsNull(), q => q.unitId.Contains(Departdata.unitId))
.WhereIF(Departdata.StartTime != null && Departdata.EndTime != null, q => q.createtime >= Departdata.StartTime && q.createtime < Departdata.EndTime.Value.AddDays(1))
.Where(q => q.IsDelete == 0).ToPageListAsync(Departdata.PageIndex, Departdata.PageSize);
var data = new QueryResult<App_Sys_DepartModel>(Departdata, list);
@ -866,7 +868,7 @@ namespace _24Hour.Controllers.system
[Route("GetQueryMenusssslist")]
public async Task<Result> GetQueryMenusssslist()
{
var list = await _db.Queryable<App_Sys_MenuModel>().Where(q => q.IsDelete == 0 && !string.IsNullOrEmpty(q.pid)).Select(q => new { q.Id, q.name }).ToListAsync();
var list = await _db.Queryable<App_Sys_MenuModel>().Where(q => q.IsDelete == 0 && q.pid.IsNull()).Select(q => new { q.Id, q.name }).ToListAsync();
result.IsSucceed = true;
result.result = list;
return result;
@ -882,8 +884,8 @@ namespace _24Hour.Controllers.system
{
var totalCount = 0;
var list = await _db.Queryable<App_Sys_MenuModel>()
.WhereIF(!Menudata.name.IsNullOrEmpty(), q => q.name.Contains(Menudata.name))
.WhereIF(!Menudata.pid.IsNullOrEmpty(), q => q.pid.Contains(Menudata.pid))
.WhereIF(!Menudata.name.IsNull(), q => q.name.Contains(Menudata.name))
.WhereIF(!Menudata.pid.IsNull(), q => q.pid.Contains(Menudata.pid))
.Where(q => q.IsDelete == 0).ToPageListAsync(Menudata.PageIndex, Menudata.PageSize);
var data = new QueryResult<App_Sys_MenuModel>(Menudata, list);
result.IsSucceed = true;

4
Elight.Logic/CurrencyDelete.cs

@ -18,11 +18,11 @@ namespace Elight.Logic
/// Id
/// </summary>
[DataMember]
public string tyId { get; set; }
public string? tyId { get; set; }
/// <summary>
/// 集合Id
/// </summary>
[DataMember]
public List<string> id { get; set; }
public List<string>? id { get; set; }
}
}

Loading…
Cancel
Save