Skip to content

Commit 2d63abd

Browse files
committed
Add disconnect (not working yet)
1 parent 06b9ce6 commit 2d63abd

6 files changed

Lines changed: 42 additions & 11 deletions

File tree

TurnBase.KaNoBu.Godot/Presentation/Main.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ private void EndGame(string gameId)
9393
return;
9494
}
9595

96+
gameField.Game.Disconnect(gameField);
9697
gameField.QueueFree();
9798

9899
this.infinityGameField.Visible = true;

TurnBase/Events/MultipleGameLogListener.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System;
21
using System.Collections.Generic;
32

43
namespace TurnBase
@@ -12,6 +11,11 @@ public void Add(IGameEventListener<TMoveNotificationModel> gameLogListener)
1211
this.gameLogListeners.Add(gameLogListener);
1312
}
1413

14+
public void Remove(IGameEventListener<TMoveNotificationModel> gameLogListener)
15+
{
16+
this.gameLogListeners.Remove(gameLogListener);
17+
}
18+
1519
public void GameStarted()
1620
{
1721
this.gameLogListeners.ForEach(a => a.GameStarted());

TurnBase/Games/Game.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace TurnBase
77
{
8-
public class Game<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> :
8+
public class Game<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> :
99
IGame<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel>
1010
{
1111
private class PlayerData
@@ -47,7 +47,7 @@ public AddPlayerStatus AddPlayer(IPlayer<TInitModel, TInitResponseModel, TMoveMo
4747
}
4848

4949
this.players.Add(
50-
new PlayerFailProtection<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel>(player),
50+
new PlayerFailProtection<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel>(player),
5151
new PlayerData { IsInGame = true, PlayerNumber = this.players.Count });
5252
return AddPlayerStatus.OK;
5353
}
@@ -94,12 +94,7 @@ async Task SingleAction(IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMov
9494
return;
9595
}
9696

97-
//TODO: Handle disconnect player in memorization and game field.
98-
var playerData = this.players[p];
99-
playerData.IsInGame = false;
100-
this.rules.PlayerDisconnected(this.mainField, playerData.PlayerNumber);
101-
this.players.Keys.ToList().ForEach(a => a.GamePlayerDisconnected(playerData.PlayerNumber));
102-
this.gameLogListeners.GamePlayerDisconnected(playerData.PlayerNumber);
97+
this.Disconnect(p);
10398
}
10499

105100
return Task.WhenAll(
@@ -218,5 +213,20 @@ private async Task<bool> MovePlayer(IPlayer<TInitModel, TInitResponseModel, TMov
218213
this.gameLogListeners.GameLogCurrentField(this.mainField.copyForPlayer(-1));
219214
return true;
220215
}
216+
217+
public void Disconnect(IGameEventListener<TMoveNotificationModel> listener)
218+
{
219+
//TODO: Handle disconnect player in memorization and game field.
220+
if (listener is IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> player && this.players.ContainsKey(player))
221+
{
222+
var playerData = this.players[player];
223+
playerData.IsInGame = false;
224+
this.rules.PlayerDisconnected(this.mainField, playerData.PlayerNumber);
225+
this.players.Keys.ToList().ForEach(a => a.GamePlayerDisconnected(playerData.PlayerNumber));
226+
this.gameLogListeners.GamePlayerDisconnected(playerData.PlayerNumber);
227+
}
228+
229+
this.gameLogListeners.Remove(listener);
230+
}
221231
}
222232
}

TurnBase/Games/IGame.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,7 @@ public interface IGame<TInitModel, TInitResponseModel, TMoveModel, TMoveResponse
1414
AddPlayerStatus AddPlayer(IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> player);
1515

1616
void AddGameLogListener(IGameEventListener<TMoveNotificationModel> gameLogListener);
17+
18+
void Disconnect(IGameEventListener<TMoveNotificationModel> player);
1719
}
1820
}

TurnBase/Games/RemoteGame.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class RemoteGame<TInitModel, TInitResponseModel, TMoveModel, TMoveRespons
2424
public string GameId { get; private set; }
2525
private IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> player;
2626
private MultipleGameLogListener<TMoveNotificationModel> gameLogListeners = new MultipleGameLogListener<TMoveNotificationModel>();
27+
private bool connected;
2728

2829
public RemoteGame(IClient client, string serverUrl, string gameId)
2930
{
@@ -56,7 +57,9 @@ public async Task Play()
5657

5758
var playerIdQueryString = new Dictionary<string, object> { { "playerId", playerId } };
5859

59-
while (true)
60+
this.connected = true;
61+
62+
while (this.connected)
6063
{
6164
var result = await this.client.SendAction(serverUrl, "wait-action", playerIdQueryString);
6265

@@ -125,5 +128,10 @@ public async Task Play()
125128
}
126129
}
127130
}
131+
132+
public void Disconnect(IGameEventListener<TMoveNotificationModel> player)
133+
{
134+
this.connected = false;
135+
}
128136
}
129137
}

TurnBase/Games/ReplayGame.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ public AddPlayerStatus AddPlayer(IPlayer<TInitModel, TInitResponseModel, TMoveMo
2929

3030
public async Task Play()
3131
{
32-
foreach (var gameEvent in events)
32+
for (var i = 0; i < events.Count; i++)
3333
{
34+
var gameEvent = events[i];
3435
if (gameEvent is GameStartedCommunicationModel gameStarted)
3536
{
3637
this.gameLogListeners.GameStarted();
@@ -70,5 +71,10 @@ public async Task Play()
7071
}
7172
}
7273
}
74+
75+
public void Disconnect(IGameEventListener<TMoveNotificationModel> player)
76+
{
77+
this.events.Clear();
78+
}
7379
}
7480
}

0 commit comments

Comments
 (0)