namespaces and guest game invitations
This commit is contained in:
@@ -1,19 +1,21 @@
|
||||
using Gameboard.Shogi.Api.ServiceModels.Messages;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Websockets.Repositories;
|
||||
|
||||
namespace AspShogiSockets.Repositories.RepositoryManagers
|
||||
namespace Gameboard.ShogiUI.Sockets.Repositories.RepositoryManagers
|
||||
{
|
||||
public interface IGameboardRepositoryManager
|
||||
{
|
||||
Task<string> CreateGuestUser();
|
||||
Task<bool> IsPlayer1(string sessionName, string playerName);
|
||||
bool IsGuest(string playerName);
|
||||
}
|
||||
|
||||
public class GameboardRepositoryManager : IGameboardRepositoryManager
|
||||
{
|
||||
private readonly IGameboardRepository repository;
|
||||
private const int MaxTries = 3;
|
||||
private const string GuestPrefix = "Guest-";
|
||||
private readonly IGameboardRepository repository;
|
||||
|
||||
public GameboardRepositoryManager(IGameboardRepository repository)
|
||||
{
|
||||
@@ -39,5 +41,23 @@ namespace AspShogiSockets.Repositories.RepositoryManagers
|
||||
}
|
||||
throw new OperationCanceledException($"Failed to create guest user after {MaxTries} tries.");
|
||||
}
|
||||
|
||||
public async Task<bool> IsPlayer1(string sessionName, string playerName)
|
||||
{
|
||||
var session = await repository.GetGame(sessionName);
|
||||
return session?.Session.Player1 == playerName;
|
||||
}
|
||||
|
||||
public async Task<string> CreateJoinCode(string sessionName, string playerName)
|
||||
{
|
||||
var getGameResponse = await repository.GetGame(sessionName);
|
||||
if (playerName == getGameResponse?.Session.Player1)
|
||||
{
|
||||
return (await repository.PostJoinCode(sessionName, playerName)).JoinCode;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public bool IsGuest(string playerName) => playerName.StartsWith(GuestPrefix);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user