Merge pull request '[✨] SignalR을 활용한 채팅서비스(기초) 개발 및 테스트' (#20) from seonkyu.kim/AcaMate_API:main into debug
All checks were successful
Back/pipeline/head This commit looks good
All checks were successful
Back/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/AcaMate/AcaMate_API/pulls/20
This commit is contained in:
commit
25dd659291
42
Program.cs
42
Program.cs
|
@ -1,12 +1,10 @@
|
||||||
|
|
||||||
using Pomelo.EntityFrameworkCore;
|
using Pomelo.EntityFrameworkCore;
|
||||||
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using AcaMate.Common.Chat;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
using Microsoft.IdentityModel.Tokens;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using Microsoft.AspNetCore.SignalR;
|
||||||
using AcaMate.Common.Models;
|
using AcaMate.Common.Models;
|
||||||
using AcaMate.V1.Services;
|
using AcaMate.V1.Services;
|
||||||
using AcaMate.Common.Data;
|
using AcaMate.Common.Data;
|
||||||
|
@ -15,9 +13,6 @@ using AcaMate.V1.Controllers;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// DB 설정부 시작
|
// DB 설정부 시작
|
||||||
builder.Configuration.AddJsonFile("private/dbSetting.json", optional: true, reloadOnChange: true);
|
builder.Configuration.AddJsonFile("private/dbSetting.json", optional: true, reloadOnChange: true);
|
||||||
// var connectionString = builder.Configuration.GetConnectionString("MariaDbConnection");
|
// var connectionString = builder.Configuration.GetConnectionString("MariaDbConnection");
|
||||||
|
@ -31,7 +26,7 @@ builder.Services.AddDbContext<AppDbContext>(optionsAction: (serviceProvider, opt
|
||||||
{
|
{
|
||||||
baseConnectionString = baseConnectionString.Replace("database=AcaMate", $"database={dbName}");
|
baseConnectionString = baseConnectionString.Replace("database=AcaMate", $"database={dbName}");
|
||||||
}
|
}
|
||||||
|
|
||||||
options.UseMySql(baseConnectionString, ServerVersion.AutoDetect(baseConnectionString));
|
options.UseMySql(baseConnectionString, ServerVersion.AutoDetect(baseConnectionString));
|
||||||
});
|
});
|
||||||
builder.Services.AddHttpContextAccessor();
|
builder.Services.AddHttpContextAccessor();
|
||||||
|
@ -53,7 +48,8 @@ builder.Services.AddAuthentication(options =>
|
||||||
.AddJwtBearer(options =>
|
.AddJwtBearer(options =>
|
||||||
{
|
{
|
||||||
var jwtSettings = builder.Configuration.GetSection("JwtSettings").Get<JwtSettings>();
|
var jwtSettings = builder.Configuration.GetSection("JwtSettings").Get<JwtSettings>();
|
||||||
options.TokenValidationParameters = new TokenValidationParameters {
|
options.TokenValidationParameters = new TokenValidationParameters
|
||||||
|
{
|
||||||
ValidateIssuer = true,
|
ValidateIssuer = true,
|
||||||
ValidateAudience = true,
|
ValidateAudience = true,
|
||||||
ValidateLifetime = true,
|
ValidateLifetime = true,
|
||||||
|
@ -76,6 +72,23 @@ builder.Services.AddEndpointsApiExplorer();
|
||||||
// builder.Services.AddSwaggerGen();
|
// builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddCustomSwagger();
|
builder.Services.AddCustomSwagger();
|
||||||
|
|
||||||
|
// SignalR 설정 추가 부분
|
||||||
|
builder.Services.AddSignalR();
|
||||||
|
builder.Services.AddCors(option =>
|
||||||
|
{
|
||||||
|
option.AddPolicy("CorsPolicy", builder =>
|
||||||
|
{
|
||||||
|
builder
|
||||||
|
.AllowAnyMethod()
|
||||||
|
.AllowAnyHeader()
|
||||||
|
.AllowCredentials()
|
||||||
|
.SetIsOriginAllowed(host => true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
///// ===== builder 설정 부 ===== /////
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
if (app.Environment.IsDevelopment())
|
if (app.Environment.IsDevelopment())
|
||||||
|
@ -84,7 +97,6 @@ if (app.Environment.IsDevelopment())
|
||||||
// app.UseSwaggerUI();
|
// app.UseSwaggerUI();
|
||||||
app.UseCustomSwaggerUI();
|
app.UseCustomSwaggerUI();
|
||||||
app.UseDeveloperExceptionPage(); // 좀더 자세한 예외 정보 제공
|
app.UseDeveloperExceptionPage(); // 좀더 자세한 예외 정보 제공
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -98,4 +110,14 @@ app.UseAuthorization();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
|
||||||
|
app.UseCors("CorsPolicy");
|
||||||
|
app.UseRouting();
|
||||||
|
|
||||||
|
app.UseWebSockets();
|
||||||
|
app.UseEndpoints(end =>
|
||||||
|
{
|
||||||
|
app.MapHub<ChatHub>("/chatHub");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
37
Program/Common/Chat/ChatHub.cs
Normal file
37
Program/Common/Chat/ChatHub.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
using Microsoft.AspNetCore.SignalR;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace AcaMate.Common.Chat;
|
||||||
|
|
||||||
|
public class ChatHub : Hub
|
||||||
|
{
|
||||||
|
// 클라이언트에서 메시지를 보내면 모든 사용자에게 전송
|
||||||
|
public async Task SendMessage(string user, string message)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Message received: {user}: {message}");
|
||||||
|
await Clients.All.SendAsync("ReceiveMessage", user, message);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 특정 사용자에게 메시지를 보냄
|
||||||
|
public async Task SendMessageToUser(string connectionId, string message)
|
||||||
|
{
|
||||||
|
await Clients.Client(connectionId).SendAsync("ReceiveMessage", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 클라이언트가 연결될 때 호출
|
||||||
|
public override async Task OnConnectedAsync()
|
||||||
|
{
|
||||||
|
await Clients.Caller.SendAsync("ReceiveMessage", "System", $"Welcome! Your ID: {Context.ConnectionId}");
|
||||||
|
Console.WriteLine("OnConnectedAsync");
|
||||||
|
await base.OnConnectedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 클라이언트가 연결 해제될 때 호출
|
||||||
|
public override async Task OnDisconnectedAsync(Exception? exception)
|
||||||
|
{
|
||||||
|
await Clients.All.SendAsync("ReceiveMessage", "System", $"{Context.ConnectionId} disconnected");
|
||||||
|
Console.WriteLine("OnDisconnectedAsync");
|
||||||
|
await base.OnDisconnectedAsync(exception);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user