You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.5 KiB
C#
64 lines
2.5 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
|
namespace BlazorChat
|
|
{
|
|
public class BlazorChatSampleHub : Hub
|
|
{
|
|
public const string HubUrl = "/chat";
|
|
|
|
// 최대 접속 인원 수를 정의합니다.
|
|
private const int MaxUsers = 1;
|
|
|
|
// 현재 접속된 사용자 수를 추적하는 static 변수입니다.
|
|
private static int _connectedUsers = 0;
|
|
|
|
public async Task Broadcast(string username, string message)
|
|
{
|
|
await Clients.All.SendAsync("Broadcast", username, message);
|
|
}
|
|
|
|
public override async Task OnConnectedAsync()
|
|
{
|
|
Console.WriteLine($"Current connected users count: {_connectedUsers}");
|
|
|
|
// 현재 접속된 사용자 수가 최대값을 초과하는지 확인합니다.
|
|
if (_connectedUsers >= MaxUsers)
|
|
{
|
|
// 클라이언트로 오류 메시지를 전송합니다.
|
|
await Clients.Caller.SendAsync("Error", "최대 접속 인원을 초과했습니다.");
|
|
|
|
//// 최대값을 초과하면 연결을 거부합니다.
|
|
Context.Abort();
|
|
//// Task를 반환하여 함수 실행을 종료합니다.
|
|
Console.WriteLine($"Current connected users count: {_connectedUsers}");
|
|
await Task.CompletedTask; // DisconnectedAsync로 이동함..
|
|
return;
|
|
|
|
// 최대값을 초과하면 연결을 거부하는 예외를 던집니다.
|
|
//Console.WriteLine($"Current connected users count: {_connectedUsers}");
|
|
//throw new HubException("최대 접속 인원을 초과했습니다.");
|
|
//return;
|
|
}
|
|
|
|
Interlocked.Increment(ref _connectedUsers);
|
|
Console.WriteLine($"Current connected users count: {_connectedUsers}");
|
|
Console.WriteLine($"{Context.ConnectionId} connected");
|
|
|
|
await base.OnConnectedAsync();
|
|
//return base.OnConnectedAsync();
|
|
}
|
|
|
|
public override async Task OnDisconnectedAsync(Exception e)
|
|
{
|
|
// 접속된 사용자 수를 감소시킵니다.
|
|
Interlocked.Decrement(ref _connectedUsers);
|
|
Console.WriteLine($"Disconnected {e?.Message} {Context.ConnectionId}");
|
|
Console.WriteLine($"Current connected users count: {_connectedUsers}");
|
|
await base.OnDisconnectedAsync(e);
|
|
}
|
|
}
|
|
} |