72 lines
2.7 KiB
C#
72 lines
2.7 KiB
C#
using Microsoft.AspNetCore.SignalR;
|
|
using QuestShare.Common;
|
|
using QuestShare.Server.Managers;
|
|
|
|
namespace QuestShare.Server.Hubs
|
|
{
|
|
public partial class ShareHub : Hub
|
|
{
|
|
[HubMethodName(nameof(SessionStart))]
|
|
public async Task Server_SessionStart(SessionStart.Request request)
|
|
{
|
|
if (BanManager.IsBanned(Context))
|
|
{
|
|
Log.Error($"[AUTHORIZE] Client {Context.ConnectionId} is banned.");
|
|
Context.Abort();
|
|
return;
|
|
}
|
|
var error = Error.None;
|
|
var client = await ClientManager.GetClient(Context.ConnectionId, request.Token);
|
|
if (client == null) error = Error.Unauthorized;
|
|
var session = await SessionManager.GetSession(request.Session.Session.ShareCode);
|
|
if (session == null) error = Error.InvalidSession;
|
|
else
|
|
{
|
|
if (Context.ConnectionId != session.ReservedConnectionId)
|
|
{
|
|
error = Error.InvalidSession;
|
|
}
|
|
}
|
|
if (error != Error.None)
|
|
{
|
|
await Clients.Caller.SendAsync(nameof(SessionStart), new SessionStart.Response
|
|
{
|
|
Error = error,
|
|
Success = false
|
|
});
|
|
return;
|
|
}
|
|
var s = await SessionManager.CreateSession(client!, Context.ConnectionId, request.Session);
|
|
if (s == null)
|
|
{
|
|
Log.Error($"[SessionStart] Unable to create session for {client!.Token} and {request.Session.Session.ShareCode}");
|
|
await Clients.Caller.SendAsync(nameof(SessionStart), new SessionStart.Response
|
|
{
|
|
Error = Error.InternalServerError,
|
|
Success = false
|
|
});
|
|
} else {
|
|
Log.Debug($"[SessionStart] Created session {s.ShareCode} for {client!.Token}");
|
|
var sObject = new Objects.Session
|
|
{
|
|
OwnerCharacterId = s.OwnerCharacterId,
|
|
ShareCode = s.ShareCode,
|
|
};
|
|
var ownedSession = new Objects.OwnedSession
|
|
{
|
|
IsActive = s.IsActive,
|
|
SkipPartyCheck = s.SkipPartyCheck,
|
|
AllowJoins = s.AllowJoins,
|
|
Session = sObject,
|
|
};
|
|
await Clients.Caller.SendAsync(nameof(SessionStart), new SessionStart.Response
|
|
{
|
|
Error = Error.None,
|
|
Success = true,
|
|
Session = ownedSession
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|