Browse Source

创建房间接口处理

develop
杨栋梁 3 years ago
parent
commit
50291cd67c
  1. 58
      AX.WebDrillServer/Hubs/FireDeductionHub.cs
  2. 6
      AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs
  3. 1
      AX.WebDrillServer/Services/FireDeductionHub/FireDeductionUser.cs
  4. 2
      AX.WebDrillServer/Services/FireDeductionHub/RoomCreateDto.cs
  5. 8
      AX.WebDrillServer/Services/FireDeductionHub/RoomCreateResultData.cs
  6. 22
      AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs

58
AX.WebDrillServer/Hubs/FireDeductionHub.cs

@ -7,7 +7,10 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.VisualBasic;
using NPOI.SS.Util;
using System.Collections.Concurrent;
using System.Runtime.CompilerServices;
using System.Security.Claims;
namespace AX.WebDrillServer.Hubs
@ -30,16 +33,48 @@ namespace AX.WebDrillServer.Hubs
_logger = logger;
this.roomManager = roomManager;
}
public async Task<FireDeductionRoom> CreateRoom(RoomCreateDto createInfo, FireDeductionUser user)
public List<FireDeductionRoom> CallServer_GetRoomList(string userId)
{
FireDeductionRoom room = new FireDeductionRoom();
room.Owner = createInfo.UserId;
room.RoomId = Guid.NewGuid().ToString();
room.RoomName = createInfo.RoomName;
room.Password = createInfo.RoomPassword;
room.Users.Add(user);
await Groups.AddToGroupAsync(user.ConnectionId, room.RoomId);
return room;
return roomManager.GetAllRooms();
}
public FireDeductionUser? CallServer_GetUser(string connectionId)
{
return roomManager.GetUserByConnectionId(connectionId);
}
public async Task<RoomCreateResultData> CallServer_CreateRoom(RoomCreateDto createInfo)
{
try
{
RoomCreateResultData resultData = new RoomCreateResultData();
var user = roomManager.GetUser(createInfo.UserId);
if (user == null)
{
resultData.RoomCreateResult = RoomCreateResult.;
return resultData;
}
FireDeductionRoom room = new FireDeductionRoom();
room.Owner = createInfo.UserId;
room.RoomId = Guid.NewGuid().ToString();
room.RoomName = createInfo.RoomName;
room.Password = createInfo.RoomPassword;
roomManager.AddRoom(room);
user.RoomId = room.RoomId;
room.Users.Add(user);
await Groups.AddToGroupAsync(user.ConnectionId, room.RoomId);
await Clients.All.SendAsync("callWeb_refreshRoomList", roomManager.GetAllRooms());
resultData.RoomCreateResult = RoomCreateResult.;
return resultData;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public async Task<bool> EnterRoom(string roomId, FireDeductionUser user, string? password = null)
{
@ -106,6 +141,7 @@ namespace AX.WebDrillServer.Hubs
{
await Clients.All.SendAsync(Message);
//TODO:保存数据
}
public override async Task OnConnectedAsync()
@ -119,6 +155,8 @@ namespace AX.WebDrillServer.Hubs
if (user != null)
{
user.Online = true;
if (user.ConnectionId != Context.ConnectionId)
user.ConnectionId = Context.ConnectionId;
var room = roomManager.GetRoomByUserId(user.UserId);
if (room != null)
{
@ -131,6 +169,8 @@ namespace AX.WebDrillServer.Hubs
user.ConnectionId = Context.ConnectionId;
user.UserId = userId!;
user.UserName = userName!;
roomManager.AddUser(user);
}
_logger.LogInformation("[{userId}][{name}] connected", userId, userName);

6
AX.WebDrillServer/Services/FireDeductionHub/FireDeductionRoom.cs

@ -2,6 +2,12 @@
namespace AX.WebDrillServer.Services.FireDeductionHub
{
public enum RoomCreateResult
{
= 0,
,
}
public enum RoomState
{
= 0,

1
AX.WebDrillServer/Services/FireDeductionHub/FireDeductionUser.cs

@ -9,6 +9,7 @@
public string UserName { get; set; } = null!;
public bool Online { get; set; } = true;
public bool Left { get; set; }
public string? RoomId { get; set; }
public string ConnectionId { get; set; } = null!;
}
}

2
AX.WebDrillServer/Services/FireDeductionHub/RoomCreateDto.cs

@ -5,7 +5,5 @@
public string UserId { get; set; } = null!;
public string? RoomPassword { get; set; }
public string RoomName { get; set; } = null!;
public int MaxPerson { get; set; } = 20;
}
}

8
AX.WebDrillServer/Services/FireDeductionHub/RoomCreateResultData.cs

@ -0,0 +1,8 @@
namespace AX.WebDrillServer.Services.FireDeductionHub
{
public class RoomCreateResultData
{
public RoomCreateResult RoomCreateResult { get; set; }
public FireDeductionRoom? CreatedRoom { get; set; }
}
}

22
AX.WebDrillServer/Services/FireDeductionHub/RoomManager.cs

@ -6,7 +6,20 @@
private List<FireDeductionRoom> fireDeductionRooms = new List<FireDeductionRoom>();
private List<FireDeductionUser> fireDeductionUsers = new List<FireDeductionUser>();
public List<FireDeductionRoom> GetAllRooms()
{
lock (this)
{
return fireDeductionRooms;
}
}
public List<FireDeductionUser> GetAllUsers()
{
lock (this)
{
return fireDeductionUsers;
}
}
public FireDeductionRoom? GetRoom(string roomId)
{
lock (this)
@ -21,6 +34,13 @@
return fireDeductionUsers.Where(r => r.UserId == userId).SingleOrDefault();
}
}
public FireDeductionUser? GetUserByConnectionId(string conneciontId)
{
lock (this)
{
return fireDeductionUsers.Where(r => r.ConnectionId == conneciontId).SingleOrDefault();
}
}
public FireDeductionRoom? GetRoomByUserId(string userId)
{
lock (this)

Loading…
Cancel
Save