refacto chathub

This commit is contained in:
Paul Schneider 2026-07-04 15:28:07 +01:00
commit 1d26cbdf3d
8 changed files with 107 additions and 113 deletions

View file

@ -41,6 +41,7 @@ using Yavsc.Settings;
using Yavsc.ViewModels.Auth;
using IdentityServer8.Models;
using IdentityServer8.EntityFramework.Mappers;
using Yavsc.Server.Hubs;
namespace Yavsc.Extensions;

View file

@ -80,7 +80,7 @@ namespace Yavsc.Services
public void OnConnected(string cxId, bool isCop)
{
var username = ChatUserNames[cxId];
if (!IsConnected(username))
if (!IsConnected(username))
ChatRoomPresence[username] = new List<string>();
_isCop[username] = isCop;
}
@ -101,7 +101,7 @@ namespace Yavsc.Services
return _isCop[userName];
}
public void OnDisctonnected(string connectionId)
public void OnDisconnected(string connectionId)
{
string uname;
@ -136,7 +136,7 @@ namespace Yavsc.Services
return false;
}
// FIXME only remove cx, not username,
// as long as he might be connected
// as long as he might be connected
// from another device, to the same room
chanInfo.Users.Remove(cxId);
if (chanInfo.Users.Count == 0)
@ -183,7 +183,7 @@ namespace Yavsc.Services
}
else{
chanInfo.Users.Add(cxId);
}
}
_logger.LogInformation($"existing room joint: {userName}=>{roomName}");
if (!ChatRoomPresence[userName].Contains(roomName))
ChatRoomPresence[userName].Add(roomName);
@ -200,7 +200,7 @@ namespace Yavsc.Services
// room was closed.
var room = _dbContext.ChatRoom.FirstOrDefault(r => r.Name == roomName);
chanInfo = new ChatRoomInfo();
if (room != null)
{
@ -244,7 +244,7 @@ namespace Yavsc.Services
throw new System.NotImplementedException();
}
public bool Dehop(string roomName, string userName)
public bool DeHop(string roomName, string userName)
{
throw new System.NotImplementedException();
}
@ -292,12 +292,12 @@ namespace Yavsc.Services
return false;
}
if (!Channels.TryGetValue(roomName, out chanInfo))
if (!Channels.TryGetValue(roomName, out chanInfo))
{
_errorHandler(roomName, _localizer.GetString(ChatHubConstants.LabNoSuchChan).ToString());
return false;
}
var kickerName = GetUserName(cxId);
if (!chanInfo.Ops.Contains(cxId))
if (!chanInfo.Hops.Contains(cxId))
@ -325,19 +325,19 @@ namespace Yavsc.Services
}
// all good, time to kick :-)
foreach (var ucx in ucxs) {
if (chanInfo.Users.Contains(ucx))
foreach (var ucx in ucxs) {
if (chanInfo.Users.Contains(ucx))
chanInfo.Users.Remove(ucx);
else if (chanInfo.Ops.Contains(ucx))
else if (chanInfo.Ops.Contains(ucx))
chanInfo.Ops.Remove(ucx);
else if (chanInfo.Hops.Contains(ucx))
else if (chanInfo.Hops.Contains(ucx))
chanInfo.Hops.Remove(ucx);
}
return true;
}
}
}

View file

@ -1,5 +1,4 @@
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Yavsc.Interface;
@ -8,6 +7,7 @@ using Yavsc.Models;
using Yavsc.Models.Google.Messaging;
using Yavsc.Models.Haircut;
using Yavsc.Models.Messaging;
using Yavsc.Server.Hubs;
namespace Yavsc.Services
{
@ -92,25 +92,25 @@ namespace Yavsc.Services
_logger.LogDebug($"Sending to {user.UserName} <{user.Email}> : {body}");
result.message_id = await _emailSender.SendEmailAsync(user.UserName, user.Email,
$"{ev.Sender} (un client) vous demande un rendez-vous",
body + Environment.NewLine);
response.success++;
var cxids = _cxManager.GetConnexionIds(user.UserName);
if (cxids == null)
var cxIds = _cxManager.GetConnexionIds(user.UserName);
if (cxIds == null)
{
_logger.LogDebug($"no cx to {user.UserName} <{user.Email}> ");
}
else
{
_logger.LogDebug($"Sending signal to {string.Join(" ", cxids)} : " + JsonConvert.SerializeObject(ev));
_logger.LogDebug($"Sending signal to {string.Join(" ", cxIds)} : " + JsonConvert.SerializeObject(ev));
foreach (var cxid in cxids)
foreach (var cxId in cxIds)
{
// from usr asp.net Id : var hubClient = hubContext.Clients.User(userId);
var hubClient = hubContext.Clients.Client(cxid);
var hubClient = hubContext.Clients.Client(cxId);
var data = new Dictionary<string, object>
{
["event"] = JsonConvert.SerializeObject(ev)
@ -152,22 +152,9 @@ namespace Yavsc.Services
return await NotifyEvent<HairCutQueryEvent>(userIds, ev);
}
public async Task<MessageWithPayloadResponse> NotifyAsync(IEnumerable<string> userIds, IEvent yaev)
public async Task<MessageWithPayloadResponse> NotifyAsync(IEnumerable<string> userIds, IEvent yavscEvent)
{
return await NotifyEvent<IEvent>(userIds, yaev);
return await NotifyEvent<IEvent>(userIds, yavscEvent);
}
/* SMS with Twilio:
public Task SendSmsAsync(TwilioSettings twilioSettigns, string number, string message)
{
var Twilio = new TwilioRestClient(twilioSettigns.AccountSID, twilioSettigns.Token);
var result = Twilio.SendMessage( twilioSettigns.SMSAccountFrom, number, message);
// Status is one of Queued, Sending, Sent, Failed or null if the number is not valid
Trace.TraceInformation(result.Status);
// Twilio doesn't currently have an async API, so return success.
return Task.FromResult(result.Status != "Failed");
} */
}
}