Skip to content

Commit 71e435a

Browse files
committed
Fix issues where the wrong player type was send in games
1 parent 39ba4bd commit 71e435a

7 files changed

Lines changed: 89 additions & 77 deletions

File tree

SyncStreamAPI/Games/Blackjack/BlackjackManager.cs

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -44,37 +44,35 @@ private void Member_FailedToReact(BlackjackMember member)
4444
{
4545
var game = blackjackGames.FirstOrDefault(x =>
4646
x.members.FindIndex(y => y.ConnectionId == member.ConnectionId) != -1);
47-
if (game != null)
47+
if (game == null) return;
48+
49+
var memberIdx = game.members.FindIndex(x => x.ConnectionId == member.ConnectionId);
50+
if (member.waitingForBet && member is { NewlyJoined: false, notPlaying: false })
4851
{
49-
var memberIdx = game.members.FindIndex(x => x.ConnectionId == member.ConnectionId);
50-
if (member.waitingForBet && member is { NewlyJoined: false, notPlaying: false })
51-
{
52-
member.SetBet(5);
53-
game.dealer.money += member.Bet;
54-
AskForBet(game, memberIdx + 1);
55-
member.waitingForBet = false;
56-
}
57-
else if (member.waitingForPull && member is { NewlyJoined: false, notPlaying: false })
58-
{
59-
AskForPull(game, memberIdx + 1);
60-
member.waitingForPull = false;
61-
}
52+
member.SetBet(5);
53+
game.dealer.money += member.Bet;
54+
AskForBet(game, memberIdx + 1);
55+
member.waitingForBet = false;
56+
}
57+
else if (member.waitingForPull && member is { NewlyJoined: false, notPlaying: false })
58+
{
59+
AskForPull(game, memberIdx + 1);
60+
member.waitingForPull = false;
6261
}
6362
}
6463

6564
private async void Member_DidSplit(BlackjackMember member)
6665
{
6766
var game = blackjackGames.FirstOrDefault(x =>
6867
x.members.FindIndex(y => y.ConnectionId == member.ConnectionId) != -1);
69-
if (game != null)
70-
{
71-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(2500));
72-
game.DealCard(member);
73-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(2500));
74-
game.DealSplitCard(member);
75-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1500));
76-
AskForSplitPull(game, game.members.FindIndex(x => x.ConnectionId == member.ConnectionId), false);
77-
}
68+
if (game == null) return;
69+
70+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
71+
game.DealCard(member);
72+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
73+
game.DealSplitCard(member);
74+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
75+
AskForSplitPull(game, game.members.FindIndex(x => x.ConnectionId == member.ConnectionId), false);
7876
}
7977

8078
private async void Game_RoundEnded(BlackjackLogic game)
@@ -100,7 +98,7 @@ private async void Game_CardDealed(BlackjackLogic game, BlackjackMember member)
10098
private async Task AddMoney(BlackjackLogic game)
10199
{
102100
var dealerText = $"Dealer had {game.dealer.pointsDTO}. ";
103-
foreach (var member in game.members?.Where(x => x is { notPlaying: false, NewlyJoined: false }).ToList())
101+
foreach (var member in game.members.Where(x => x is { notPlaying: false, NewlyJoined: false }).ToList())
104102
{
105103
var totalText = $"You had {member.points}";
106104

@@ -135,19 +133,18 @@ private async Task AddMoney(BlackjackLogic game)
135133

136134
private async Task InitRound(BlackjackLogic game, int timeout)
137135
{
138-
await SendAllUsers(game);
139136
game.members.ForEach(x => x.NewlyJoined = false);
140137
await Task.Delay(timeout);
141138
if (!game.GameEnded) AskForBet(game, 0);
142139
}
143140

144141
public async Task SendAllUsers(BlackjackLogic game)
145142
{
146-
foreach (var member in game.members?.Where(x => x.ConnectionId.Length > 0).ToList())
143+
foreach (var member in game.members.Where(x => x.ConnectionId.Length > 0).ToList())
147144
{
148145
await _hub.Clients.Client(member.ConnectionId).sendblackjackself(member);
149146
await _hub.Clients.Client(member.ConnectionId)
150-
.sendblackjackmembers(game.members?.Where(x => x.ConnectionId != member.ConnectionId).ToList());
147+
.sendblackjackmembers(game.members.Where(x => x.ConnectionId != member.ConnectionId).ToList());
151148
}
152149

153150
await _hub.Clients.Group(game.RoomId).sendblackjackdealer(game.dealer);
@@ -159,18 +156,19 @@ public async Task<bool> PlayNewRound(string UniqueId)
159156
if (idx < 0)
160157
{
161158
var room = MainManager.GetRoom(UniqueId);
162-
var bjMember = new List<BlackjackMember>();
163-
foreach (var member in room.server.members.Take(5).ToList()) bjMember.Add(member.ToBlackjackMember(this));
159+
var bjMember = room.server.members.Take(5).ToList().Select(member => member.ToBlackjackMember(this))
160+
.ToList();
164161

165162
if (room.server.members.Count > 5)
166-
foreach (var member in room.server.members.Skip(5).ToList())
163+
foreach (var bjMem in room.server.members.Skip(5).ToList()
164+
.Select(member => member.ToBlackjackMember(this)))
167165
{
168-
var bjMem = member.ToBlackjackMember(this);
169166
bjMem.notPlaying = true;
170167
bjMember.Add(bjMem);
171168
}
172169

173170
var game = new BlackjackLogic(this, UniqueId, bjMember);
171+
await SendAllUsers(game);
174172
blackjackGames.Add(game);
175173
await _hub.Clients.Group(UniqueId).playblackjack(true);
176174
await InitRound(game, 500);
@@ -211,7 +209,7 @@ public async void AskForBet(BlackjackLogic game, int memberIdx)
211209
}
212210
else
213211
{
214-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(250), TimeSpan.FromMilliseconds(1250));
212+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(250), TimeSpan.FromMilliseconds(500));
215213
member.SetBet(5);
216214
game.dealer.money += member.Bet;
217215
AskForBet(game, memberIdx + 1);
@@ -225,9 +223,9 @@ public async void AskForBet(BlackjackLogic game, int memberIdx)
225223
else
226224
{
227225
await game.PlayRound();
228-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(2500));
226+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
229227
await game.PlayRound();
230-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(2500));
228+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
231229
var idx = game.members.FindIndex(x =>
232230
x is { notPlaying: false, NewlyJoined: false } and { blackjack: false, points: < 21 });
233231
if (idx > -1)
@@ -253,7 +251,7 @@ public async void AskForPull(BlackjackLogic game, int memberIdx)
253251
}
254252
else
255253
{
256-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1500));
254+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
257255
switch (BlackjackAi.SmartPull(member, game.dealer, true, false))
258256
{
259257
case BlackjackSmartReaction.Stand:
@@ -301,7 +299,7 @@ public async void AskForSplitPull(BlackjackLogic game, int memberIdx, bool pullF
301299
}
302300
else
303301
{
304-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1500));
302+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
305303
switch (BlackjackAi.SmartPull(member, game.dealer, false, pullForSplitHand))
306304
{
307305
case BlackjackSmartReaction.Stand:
@@ -332,7 +330,7 @@ public async void AskForSplitPull(BlackjackLogic game, int memberIdx, bool pullF
332330
}
333331
else
334332
{
335-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1500));
333+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
336334
switch (BlackjackAi.SmartPull(member, game.dealer, false, pullForSplitHand))
337335
{
338336
case BlackjackSmartReaction.Stand:
@@ -355,11 +353,11 @@ public async void DealerPull(BlackjackLogic game)
355353
{
356354
game.dealer.cards[1].FaceUp = true;
357355
await _hub.Clients.Group(game.RoomId).sendblackjackdealer(game.dealer);
358-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(2500));
356+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
359357
while (game.DealDealerCard())
360358
{
361359
await _hub.Clients.Group(game.RoomId).sendblackjackdealer(game.dealer);
362-
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(2500));
360+
await BlackjackTimer.RndDelay(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(1250));
363361
}
364362

365363
game.EndRound();

SyncStreamAPI/Helper/NAudioTools.cs

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,35 @@
33

44
namespace SyncStreamAPI.Helper;
55

6-
public class NAudioTools
6+
public static class NAudioTools
77
{
88
public static byte[] GetWaveform(string inputFilePath)
99
{
10-
using (var reader = new AudioFileReader(inputFilePath))
11-
{
12-
var sampleProvider = reader.ToSampleProvider();
13-
var samplesPerSecond = sampleProvider.WaveFormat.SampleRate;
14-
var channelCount = sampleProvider.WaveFormat.Channels;
15-
var samplesPerFrame = samplesPerSecond / 30;
16-
var buffer = new float[samplesPerFrame * channelCount];
10+
using var reader = new AudioFileReader(inputFilePath);
11+
var sampleProvider = reader.ToSampleProvider();
12+
var samplesPerSecond = sampleProvider.WaveFormat.SampleRate;
13+
var channelCount = sampleProvider.WaveFormat.Channels;
14+
var samplesPerFrame = samplesPerSecond / 30;
15+
var buffer = new float[samplesPerFrame * channelCount];
1716

18-
using (var memoryStream = new MemoryStream())
17+
using var memoryStream = new MemoryStream();
18+
using (var writer =
19+
new WaveFileWriter(memoryStream, new WaveFormat(samplesPerSecond, 16, channelCount)))
20+
{
21+
while (reader.Position < reader.Length)
1922
{
20-
using (var writer =
21-
new WaveFileWriter(memoryStream, new WaveFormat(samplesPerSecond, 16, channelCount)))
23+
var readSamples = sampleProvider.Read(buffer, 0, buffer.Length);
24+
var waveform = new float[readSamples / channelCount];
25+
for (var i = 0; i < readSamples; i += channelCount)
2226
{
23-
while (reader.Position < reader.Length)
24-
{
25-
var readSamples = sampleProvider.Read(buffer, 0, buffer.Length);
26-
var waveform = new float[readSamples / channelCount];
27-
for (var i = 0; i < readSamples; i += channelCount)
28-
{
29-
var sampleValue = buffer[i];
30-
waveform[i / channelCount] = sampleValue;
31-
}
32-
33-
writer.WriteSamples(waveform, 0, waveform.Length);
34-
}
27+
var sampleValue = buffer[i];
28+
waveform[i / channelCount] = sampleValue;
3529
}
3630

37-
return memoryStream.ToArray();
31+
writer.WriteSamples(waveform, 0, waveform.Length);
3832
}
3933
}
34+
35+
return memoryStream.ToArray();
4036
}
4137
}

SyncStreamAPI/Hubs/BlackjackHub.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,18 @@ public async Task PlayBlackjack(string UniqueId)
1414
{
1515
var playing = await _blackjackManager.PlayNewRound(UniqueId);
1616
var room = GetRoom(UniqueId);
17-
if (playing && room.GallowGame != null)
17+
switch (playing)
1818
{
19-
_gallowGameManager.PlayNewRound(UniqueId);
20-
await RoomManager.SendPlayerType(room);
21-
}
22-
else
23-
{
24-
await Clients.Group(UniqueId).playertype(PlayerType.Blackjack);
19+
case true when room.GallowGame != null:
20+
_gallowGameManager.PlayNewRound(UniqueId);
21+
await RoomManager.SendPlayerType(room);
22+
break;
23+
case true:
24+
await Clients.Group(UniqueId).playertype(PlayerType.Blackjack);
25+
break;
26+
case false:
27+
await RoomManager.SendPlayerType(room);
28+
break;
2529
}
2630
}
2731

SyncStreamAPI/Hubs/ChatHub.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,12 @@ public async Task SendMessage(ChatMessage message, string uniqueId)
2626

2727
switch (room.GameMode)
2828
{
29-
case GameMode.NotPlaying:
30-
case GameMode.Blackjack:
31-
case GameMode.Chess:
32-
await Clients.Group(mainServer.RoomId).sendmessage(message);
33-
break;
3429
case GameMode.Gallows:
3530
var sender = mainServer.members.FirstOrDefault(x => Context.ConnectionId == x.ConnectionId);
3631
await _gallowGameManager.PlayGallow(room.GallowGame, sender, message, room.GallowGame.GallowTime);
3732
break;
3833
}
34+
await Clients.Group(mainServer.RoomId).sendmessage(message);
3935

4036
return;
4137
}

SyncStreamAPI/Hubs/UserHub.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public async Task AddUser(string username, string UniqueId, string password)
8282
game.AddMember(newMember, _blackjackManager);
8383
await Clients.Caller.playblackjack(true);
8484
//give time to build component
85-
await Task.Delay(250);
85+
await Task.Delay(500);
8686
await _blackjackManager.SendAllUsers(game);
8787
}
8888

SyncStreamAPI/Hubs/WhiteBoardHub.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Newtonsoft.Json;
77
using SyncStreamAPI.Enums;
88
using SyncStreamAPI.Models;
9+
using SyncStreamAPI.ServerData.Helper;
910

1011
namespace SyncStreamAPI.Hubs;
1112

@@ -30,7 +31,6 @@ public async Task PlayGallowsSettings(string UniqueId, Language language, int ga
3031
{
3132
try
3233
{
33-
await Clients.Group(UniqueId).playertype(PlayerType.WhiteBoard);
3434
var room = GetRoom(UniqueId);
3535
if (room == null) return;
3636

@@ -52,8 +52,11 @@ public async Task PlayGallowsSettings(string UniqueId, Language language, int ga
5252
await Clients.Group(UniqueId).gallowusers(room.GallowGame.members);
5353
var startGallowMessage = new SystemMessage("Started a round of gallows, have fun!");
5454
await Clients.Group(UniqueId).sendmessage(startGallowMessage);
55+
await Clients.Group(UniqueId).playertype(PlayerType.WhiteBoard);
5556
return;
5657
}
58+
59+
await RoomManager.SendPlayerType(room);
5760

5861
gallows.drawings = new List<Drawing>();
5962
gallows.members.ForEach(x =>

SyncStreamAPI/ServerData/Helper/RoomManager.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Extensions.Configuration;
99
using Microsoft.Extensions.DependencyInjection;
1010
using SyncStreamAPI.Enums;
11+
using SyncStreamAPI.Enums.Games;
1112
using SyncStreamAPI.Helper;
1213
using SyncStreamAPI.Hubs;
1314
using SyncStreamAPI.Interfaces;
@@ -226,6 +227,20 @@ public static async Task<PlayerType> SendPlayerType(Room room, bool sendToUsers
226227
{
227228
using var scope = ServiceProvider.CreateScope();
228229
var hub = scope.ServiceProvider.GetRequiredService<IHubContext<ServerHub, IServerHub>>();
230+
231+
switch (room.GameMode)
232+
{
233+
case GameMode.Blackjack:
234+
await hub.Clients.Group(room.uniqueId).playertype(PlayerType.Blackjack);
235+
return PlayerType.Blackjack;
236+
case GameMode.Chess:
237+
await hub.Clients.Group(room.uniqueId).playertype(PlayerType.Chess);
238+
return PlayerType.Chess;
239+
case GameMode.Gallows:
240+
await hub.Clients.Group(room.uniqueId).playertype(PlayerType.WhiteBoard);
241+
return PlayerType.WhiteBoard;
242+
}
243+
229244
var uniqueId = room.uniqueId;
230245
var key = room.server.currentVideo;
231246
var result = PlayerType.Nothing;

0 commit comments

Comments
 (0)