Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion TournamentAssistant/UI/FlowCoordinators/RoomCoordinator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,11 @@ public void SongFinished(StandardLevelScenesTransitionSetupDataSO standardLevelS
Difficulties = map.parentDifficultyBeatmapSet.difficultyBeatmaps.Select(x => (int)x.difficulty).ToArray()
}
},
Score = results.modifiedScore
Score = results.modifiedScore,
Misses = results.missedCount,
BadCuts = results.badCutsCount,
GoodCuts = results.goodCutsCount,
EndTime = results.endSongTime
};

if (results.levelEndStateType == LevelCompletionResults.LevelEndStateType.Cleared)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<EncryptedPassword>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAgLk4hF8hxkiQ4cN43iSg7QAAAAACAAAAAAAQZgAAAAEAACAAAAC8Sc4fYUa+pPv8FqV9y4fAc+xCbmMWjHaWkNO2FxOrAAAAAAAOgAAAAAIAACAAAACLSwjFK4hPrz9yiKpBuF376VK8+p17OSWwOPXgmYTbaCAAAACrSl4IwcYt26VqOU9wOo+potPvZIb/NK6FmcDuKu2STkAAAABxh2+7mXLQT4WAOBdSLjvZkMrGLayMc/i4jtsXEoq9/6H3/x8fezQotV1AMNo1kEQygdlJZK6VEWzGySVJWPqy</EncryptedPassword>
<History>True|2022-05-31T05:04:46.8734125Z;True|2022-05-24T18:10:10.9432816-05:00;True|2022-05-20T00:48:31.1875219-05:00;False|2022-05-20T00:36:09.3699887-05:00;True|2022-05-19T23:32:40.4898188-05:00;False|2022-05-19T23:29:05.2480570-05:00;True|2022-05-10T00:05:07.5292150-05:00;False|2022-05-10T00:02:10.1918955-05:00;True|2022-04-30T16:38:37.1271080-05:00;True|2022-04-30T16:29:18.9429794-05:00;False|2022-04-30T15:33:44.6878088-05:00;False|2022-04-30T15:30:26.1186139-05:00;False|2022-04-30T15:26:53.4525242-05:00;False|2022-04-30T15:25:34.9467241-05:00;False|2022-04-30T14:55:17.3885287-05:00;False|2022-04-30T14:39:42.4783680-05:00;False|2022-04-30T14:35:58.9702981-05:00;False|2022-04-30T14:23:28.3338839-05:00;False|2022-04-30T14:20:47.8025347-05:00;False|2022-04-30T14:10:49.7546588-05:00;False|2022-04-30T14:06:39.9156950-05:00;False|2022-04-30T13:59:27.1702334-05:00;False|2022-04-30T13:57:34.2037863-05:00;False|2022-04-30T13:45:03.5555315-05:00;False|2022-04-30T13:42:58.7480471-05:00;False|2022-04-30T13:42:33.4223134-05:00;False|2022-04-30T13:33:49.9959663-05:00;False|2022-04-30T01:11:15.8646243-05:00;False|2022-04-30T01:08:38.2080358-05:00;False|2022-04-30T01:05:43.1047108-05:00;False|2022-04-30T01:00:34.5274425-05:00;False|2022-04-30T00:53:49.0872590-05:00;False|2022-04-30T00:51:25.5073205-05:00;False|2022-04-30T00:50:48.7949266-05:00;False|2022-04-30T00:47:08.2989707-05:00;False|2022-04-30T00:46:50.6142024-05:00;False|2022-04-30T00:46:35.5329678-05:00;False|2022-04-30T00:45:28.0401932-05:00;False|2022-04-30T00:36:12.5530251-05:00;False|2022-04-30T00:30:44.8961474-05:00;False|2022-04-30T00:27:55.9635992-05:00;False|2022-04-30T00:26:30.2101687-05:00;False|2022-04-30T00:22:58.6204642-05:00;True|2021-08-13T20:40:00.8260412-05:00;False|2021-08-13T20:38:44.3992083-05:00;False|2021-08-13T20:36:58.0439107-05:00;False|2021-08-13T20:33:10.5051184-05:00;False|2021-08-13T20:27:53.2235208-05:00;False|2021-08-13T20:27:16.7369936-05:00;False|2021-08-13T20:26:25.6866293-05:00;False|2021-08-13T20:24:31.5457991-05:00;False|2021-08-13T20:24:13.4994144-05:00;</History>
<History>True|2024-06-28T00:18:33.5337402Z;True|2022-05-31T00:04:46.8734125-05:00;True|2022-05-24T18:10:10.9432816-05:00;True|2022-05-20T00:48:31.1875219-05:00;False|2022-05-20T00:36:09.3699887-05:00;True|2022-05-19T23:32:40.4898188-05:00;False|2022-05-19T23:29:05.2480570-05:00;True|2022-05-10T00:05:07.5292150-05:00;False|2022-05-10T00:02:10.1918955-05:00;True|2022-04-30T16:38:37.1271080-05:00;True|2022-04-30T16:29:18.9429794-05:00;False|2022-04-30T15:33:44.6878088-05:00;False|2022-04-30T15:30:26.1186139-05:00;False|2022-04-30T15:26:53.4525242-05:00;False|2022-04-30T15:25:34.9467241-05:00;False|2022-04-30T14:55:17.3885287-05:00;False|2022-04-30T14:39:42.4783680-05:00;False|2022-04-30T14:35:58.9702981-05:00;False|2022-04-30T14:23:28.3338839-05:00;False|2022-04-30T14:20:47.8025347-05:00;False|2022-04-30T14:10:49.7546588-05:00;False|2022-04-30T14:06:39.9156950-05:00;False|2022-04-30T13:59:27.1702334-05:00;False|2022-04-30T13:57:34.2037863-05:00;False|2022-04-30T13:45:03.5555315-05:00;False|2022-04-30T13:42:58.7480471-05:00;False|2022-04-30T13:42:33.4223134-05:00;False|2022-04-30T13:33:49.9959663-05:00;False|2022-04-30T01:11:15.8646243-05:00;False|2022-04-30T01:08:38.2080358-05:00;False|2022-04-30T01:05:43.1047108-05:00;False|2022-04-30T01:00:34.5274425-05:00;False|2022-04-30T00:53:49.0872590-05:00;False|2022-04-30T00:51:25.5073205-05:00;False|2022-04-30T00:50:48.7949266-05:00;False|2022-04-30T00:47:08.2989707-05:00;False|2022-04-30T00:46:50.6142024-05:00;False|2022-04-30T00:46:35.5329678-05:00;False|2022-04-30T00:45:28.0401932-05:00;False|2022-04-30T00:36:12.5530251-05:00;False|2022-04-30T00:30:44.8961474-05:00;False|2022-04-30T00:27:55.9635992-05:00;False|2022-04-30T00:26:30.2101687-05:00;False|2022-04-30T00:22:58.6204642-05:00;True|2021-08-13T20:40:00.8260412-05:00;False|2021-08-13T20:38:44.3992083-05:00;False|2021-08-13T20:36:58.0439107-05:00;False|2021-08-13T20:33:10.5051184-05:00;False|2021-08-13T20:27:53.2235208-05:00;False|2021-08-13T20:27:16.7369936-05:00;False|2021-08-13T20:26:25.6866293-05:00;False|2021-08-13T20:24:31.5457991-05:00;False|2021-08-13T20:24:13.4994144-05:00;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>
219 changes: 219 additions & 0 deletions TournamentAssistantCore/StateManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TournamentAssistantShared.Models;
using TournamentAssistantShared.Models.Packets;
using TournamentAssistantShared.Utilities;

namespace TournamentAssistantCore
{
internal class StateManager
{
public event Func<User, Task> UserConnected;
public event Func<User, Task> UserDisconnected;
public event Func<User, Task> UserInfoUpdated;
public event Func<Match, Task> MatchInfoUpdated;
public event Func<Match, Task> MatchCreated;
public event Func<Match, Task> MatchDeleted;

private SystemServer Server { get; set; }

public StateManager(SystemServer server)
{
Server = server;
}

public List<User> GetUsers()
{
lock (Server.State.Users)
{
return Server.State.Users.ToList();
}
}

public User GetUserById(string guid)
{
lock (Server.State.Users)
{
return Server.State.Users.FirstOrDefault(x => x.Guid == guid.ToString());
}
}

public List<Match> GetMatches()
{
lock (Server.State.Matches)
{
return Server.State.Matches.ToList();
}
}

public List<CoreServer> GetServers()
{
lock (Server.State.KnownHosts)
{
return Server.State.KnownHosts.ToList();
}
}

#region EventManagement
public async Task AddUser(User user)
{
lock (Server.State.Users)
{
Server.State.Users.Add(user);
}

var @event = new Event
{
user_added_event = new Event.UserAddedEvent
{
User = user
}
};

await Server.BroadcastToAllClients(new Packet
{
Event = @event
});

if (UserConnected != null) await UserConnected.Invoke(user);
}

public async Task UpdateUser(User user)
{
lock (Server.State.Users)
{
var userToReplace = Server.State.Users.FirstOrDefault(x => x.UserEquals(user));
Server.State.Users.Remove(userToReplace);
Server.State.Users.Add(user);
}

var @event = new Event
{
user_updated_event = new Event.UserUpdatedEvent
{
User = user
}
};
await Server.BroadcastToAllClients(new Packet
{
Event = @event
});

if (UserInfoUpdated != null) await UserInfoUpdated.Invoke(user);
}

public async Task RemoveUser(User user)
{
User userToRemove;
lock (Server.State.Users)
{
userToRemove = Server.State.Users.FirstOrDefault(x => x.UserEquals(user));
if (userToRemove == null)
{
return;
}
Server.State.Users.Remove(userToRemove);
}

var @event = new Event
{
user_left_event = new Event.UserLeftEvent
{
User = user
}
};

await Server.BroadcastToAllClients(new Packet
{
Event = @event
});

for (int i = 0; i < Server.State.Matches.Count; i++)
{
var m = Server.State.Matches[i];
if (m.AssociatedUsers.Contains(userToRemove.Guid))
{
m.AssociatedUsers.RemoveAll((x) => x == userToRemove.Guid);
await UpdateMatch(m);
}
}

if (UserDisconnected != null) await UserDisconnected.Invoke(user);
}

public async Task CreateMatch(Match match)
{
lock (Server.State.Matches)
{
Server.State.Matches.Add(match);
}

var @event = new Event
{
match_created_event = new Event.MatchCreatedEvent
{
Match = match
}
};
await Server.BroadcastToAllClients(new Packet
{
Event = @event
});

if (MatchCreated != null) await MatchCreated.Invoke(match);
}

public async Task UpdateMatch(Match match)
{
lock (Server.State.Matches)
{
var matchToReplace = Server.State.Matches.FirstOrDefault(x => x.MatchEquals(match));
Server.State.Matches.Remove(matchToReplace);
Server.State.Matches.Add(match);
}

var @event = new Event
{
match_updated_event = new Event.MatchUpdatedEvent
{
Match = match
}
};

var updatePacket = new Packet
{
Event = @event
};

await Server.BroadcastToAllClients(updatePacket);

if (MatchInfoUpdated != null) await MatchInfoUpdated.Invoke(match);
}

public async Task DeleteMatch(Match match)
{
lock (Server.State.Matches)
{
var matchToRemove = Server.State.Matches.FirstOrDefault(x => x.MatchEquals(match));
Server.State.Matches.Remove(matchToRemove);
}

var @event = new Event
{
match_deleted_event = new Event.MatchDeletedEvent
{
Match = match
}
};
await Server.BroadcastToAllClients(new Packet
{
Event = @event
});

if (MatchDeleted != null) await MatchDeleted.Invoke(match);
}
#endregion EventManagement
}
}
Loading