2024-01-27 18:58:02 +00:00
|
|
|
using System;
|
2024-01-27 09:19:32 +00:00
|
|
|
using System.Collections.Generic;
|
2024-01-28 01:40:38 +00:00
|
|
|
using System.Linq;
|
2024-01-27 18:54:06 +00:00
|
|
|
using Newtonsoft.Json;
|
2024-01-28 15:13:25 +00:00
|
|
|
using Newtonsoft.Json.Linq;
|
2024-01-27 09:19:32 +00:00
|
|
|
|
2024-01-27 18:58:02 +00:00
|
|
|
[Serializable]
|
2024-01-27 19:05:24 +00:00
|
|
|
[JsonObject]
|
2024-01-27 09:19:32 +00:00
|
|
|
public class Room
|
|
|
|
{
|
|
|
|
public string code;
|
2024-01-28 15:13:25 +00:00
|
|
|
|
|
|
|
[JsonConverter(typeof(ArrayToDictionaryConverter<Question>))]
|
2024-01-28 14:42:32 +00:00
|
|
|
public Dictionary<int, Question> questions;
|
2024-01-27 18:54:06 +00:00
|
|
|
public Dictionary<string, Player> players;
|
2024-01-28 11:14:09 +00:00
|
|
|
public string currentQuestionId;
|
2024-01-27 14:08:12 +00:00
|
|
|
public double creationDate;
|
2024-01-27 21:26:23 +00:00
|
|
|
public int currentState;
|
2024-01-27 14:08:12 +00:00
|
|
|
|
|
|
|
public Room(string _code)
|
|
|
|
{
|
2024-01-27 18:58:02 +00:00
|
|
|
code = _code;
|
|
|
|
creationDate = DateTime.Now.ToOADate();
|
2024-01-27 18:59:51 +00:00
|
|
|
players = new Dictionary<string, Player>();
|
2024-01-28 14:42:32 +00:00
|
|
|
questions = new Dictionary<int, Question>();
|
2024-01-28 11:14:09 +00:00
|
|
|
currentQuestionId = "";
|
2024-01-27 23:06:23 +00:00
|
|
|
currentState = 1; //default by PC
|
2024-01-27 14:08:12 +00:00
|
|
|
}
|
2024-01-27 18:54:06 +00:00
|
|
|
|
2024-01-28 12:18:40 +00:00
|
|
|
/// <summary>
|
|
|
|
/// Return the only player with a specific ID
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
public Player GetPlayerById(string id)
|
|
|
|
{
|
|
|
|
return players[id];
|
|
|
|
}
|
|
|
|
|
2024-01-27 18:54:06 +00:00
|
|
|
public List<Player> GetPlayerList()
|
|
|
|
{
|
|
|
|
return new List<Player>(players.Values);
|
|
|
|
}
|
|
|
|
|
2024-01-28 01:40:38 +00:00
|
|
|
/// <summary>
|
|
|
|
/// return the list of player ordered by who joined first
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
public List<Player> GetOrderedPlayerList()
|
|
|
|
{
|
|
|
|
return players.Values.OrderBy(x => x.creationDate).ToList();
|
|
|
|
}
|
|
|
|
|
2024-01-28 01:40:12 +00:00
|
|
|
public List<Question> GetQuestionsByPlayer(Player player)
|
|
|
|
{
|
2024-01-28 14:42:32 +00:00
|
|
|
List<Question> playerQuestions = new();
|
2024-01-28 01:40:12 +00:00
|
|
|
|
2024-01-28 14:42:32 +00:00
|
|
|
foreach (Question question in new List<Question>(questions.Values))
|
2024-01-28 01:40:12 +00:00
|
|
|
{
|
|
|
|
foreach (Proposition proposition in new List<Proposition>(question.propositions.Values))
|
|
|
|
{
|
|
|
|
if (proposition.owner.id == player.id)
|
|
|
|
{
|
2024-01-28 14:42:32 +00:00
|
|
|
playerQuestions.Add(question);
|
2024-01-28 01:40:12 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-28 14:42:32 +00:00
|
|
|
return playerQuestions;
|
2024-01-28 01:40:12 +00:00
|
|
|
}
|
|
|
|
|
2024-01-28 01:26:57 +00:00
|
|
|
|
2024-01-28 01:40:12 +00:00
|
|
|
public void SetPlayersAreReady(int _state)
|
2024-01-27 21:26:23 +00:00
|
|
|
{
|
|
|
|
currentState = _state;
|
|
|
|
}
|
2024-01-28 01:40:38 +00:00
|
|
|
|
|
|
|
public List<Proposition> GetPropositionsByPlayer(Player player)
|
|
|
|
{
|
2024-01-28 14:42:32 +00:00
|
|
|
List<Proposition> playerPropositions = new();
|
2024-01-28 01:40:38 +00:00
|
|
|
|
2024-01-28 14:42:32 +00:00
|
|
|
foreach (Question question in new List<Question>(questions.Values))
|
2024-01-28 01:40:38 +00:00
|
|
|
{
|
|
|
|
foreach (Proposition proposition in new List<Proposition>(question.propositions.Values))
|
|
|
|
{
|
|
|
|
if (proposition.owner.id == player.id)
|
|
|
|
{
|
2024-01-28 14:42:32 +00:00
|
|
|
playerPropositions.Add(proposition);
|
2024-01-28 01:40:38 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-28 14:42:32 +00:00
|
|
|
return playerPropositions;
|
2024-01-28 01:40:38 +00:00
|
|
|
}
|
2024-01-27 09:19:32 +00:00
|
|
|
}
|
2024-01-27 18:54:06 +00:00
|
|
|
|
2024-01-28 15:13:25 +00:00
|
|
|
public class ArrayToDictionaryConverter<T> : JsonConverter<Dictionary<int, T>>
|
|
|
|
{
|
|
|
|
public override Dictionary<int, T> ReadJson(JsonReader reader, Type objectType, Dictionary<int, T> existingValue, bool hasExistingValue, JsonSerializer serializer)
|
|
|
|
{
|
|
|
|
if (reader.TokenType == JsonToken.StartArray)
|
|
|
|
{
|
|
|
|
var jsonArray = JArray.Load(reader);
|
|
|
|
var dictionary = new Dictionary<int, T>();
|
|
|
|
|
|
|
|
for (int i = 0; i < jsonArray.Count; i++)
|
|
|
|
{
|
|
|
|
var item = jsonArray[i].ToObject<T>(serializer);
|
|
|
|
dictionary.Add(i, item);
|
|
|
|
}
|
|
|
|
|
|
|
|
return dictionary;
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void WriteJson(JsonWriter writer, Dictionary<int, T> value, JsonSerializer serializer)
|
|
|
|
{
|
|
|
|
if (value != null)
|
|
|
|
{
|
|
|
|
var jsonArray = new JArray();
|
|
|
|
|
|
|
|
foreach (var kvp in value)
|
|
|
|
{
|
|
|
|
var itemJson = JToken.FromObject(kvp.Value, serializer);
|
|
|
|
jsonArray.Add(itemJson);
|
|
|
|
}
|
|
|
|
|
|
|
|
jsonArray.WriteTo(writer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|