Skip to content

Commit

Permalink
Merge branch 'hotfix/v0.7.1' into 'main'
Browse files Browse the repository at this point in the history
fix: waiting for process to initialize before sending init to matchesdb

See merge request elympics/unity-sdk-package!184
  • Loading branch information
Dawid Sygocki committed Jun 21, 2023
2 parents c6482a3 + d0459fd commit 3152876
Show file tree
Hide file tree
Showing 14 changed files with 50 additions and 29 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
## [0.7.1](https://github.com/Elympics/Unity-SDK/compare/v0.7.0...v0.7.1) (2023-06-13)


### Bug Fixes 🪲

* Wait for server to fully initialize before marking it as initialized in the database ([65ce740](https://github.com/Elympics/Unity-SDK/commit/65ce740f3c1593db35552b360e51b5f536cbf5d7))



## [0.7.0](https://github.com/Elympics/Unity-SDK/compare/v0.6.3...v0.7.0) (2023-05-05)


Expand Down
2 changes: 1 addition & 1 deletion Runtime/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@

[assembly: InternalsVisibleTo("Elympics.Tests")]
[assembly: InternalsVisibleTo("Elympics.Editor")]
[assembly: AssemblyVersion("0.7.0.0")]
[assembly: AssemblyVersion("0.7.1.0")]
3 changes: 0 additions & 3 deletions Runtime/ElympicsSystems/ElympicsBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ protected virtual void LateFixedUpdate()
#region ClientCallbacks

protected void OnStandaloneClientInit(InitialMatchPlayerDataGuid data) => Enqueue(() => elympicsBehavioursManager.OnStandaloneClientInit(data));
protected void OnClientsOnServerInit(InitialMatchPlayerDatasGuid data) => Enqueue(() => elympicsBehavioursManager.OnClientsOnServerInit(data));
protected void OnSynchronized(TimeSynchronizationData data) => Enqueue(() => elympicsBehavioursManager.OnSynchronized(data));
protected void OnDisconnectedByServer() => Enqueue(elympicsBehavioursManager.OnDisconnectedByServer);
protected void OnDisconnectedByClient() => Enqueue(elympicsBehavioursManager.OnDisconnectedByClient);
Expand All @@ -162,13 +161,11 @@ protected virtual void LateFixedUpdate()
#region BotCallbacks

protected void OnStandaloneBotInit(InitialMatchPlayerDataGuid initialMatchData) => Enqueue(() => elympicsBehavioursManager.OnStandaloneBotInit(initialMatchData));
protected void OnBotsOnServerInit(InitialMatchPlayerDatasGuid initialMatchData) => Enqueue(() => elympicsBehavioursManager.OnBotsOnServerInit(initialMatchData));

#endregion

#region ServerCallbacks

protected void OnServerInit(InitialMatchPlayerDatasGuid initialMatchData) => Enqueue(() => elympicsBehavioursManager.OnServerInit(initialMatchData));
protected void OnPlayerConnected(ElympicsPlayer player) => Enqueue(() => elympicsBehavioursManager.OnPlayerConnected(player));
protected void OnPlayerDisconnected(ElympicsPlayer player) => Enqueue(() => elympicsBehavioursManager.OnPlayerDisconnected(player));

Expand Down
21 changes: 11 additions & 10 deletions Runtime/ElympicsSystems/ElympicsServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,21 +64,22 @@ private void SetupCallbacks()
{
_gameEngineAdapter.PlayerConnected += OnPlayerConnected;
_gameEngineAdapter.PlayerDisconnected += OnPlayerDisconnected;
_gameEngineAdapter.InitializedWithMatchPlayerDatas += data =>
_gameEngineAdapter.ReceivedInitialMatchPlayerDatas += args => Enqueue(() =>
{
Enqueue(() => _playerData = data);
OnServerInit(data);
InitializeBotsAndClientInServer(data);
Enqueue(SetInitialized);
};
_playerData = args.Data;
elympicsBehavioursManager.OnServerInit(args.Data);
InitializeBotsAndClientInServer(args.Data);
SetInitialized();
args.OnInitialized();
});
}

private void InitializeBotsAndClientInServer(InitialMatchPlayerDatasGuid data)
{
if (HandlingBotsInServer)
{
var dataOfBots = data.Where(x => x.IsBot).ToList();
OnBotsOnServerInit(new InitialMatchPlayerDatasGuid(dataOfBots));
elympicsBehavioursManager.OnBotsOnServerInit(new InitialMatchPlayerDatasGuid(dataOfBots));

_playersOfBots = dataOfBots.Select(x => x.Player).ToArray();
CallPlayerConnectedFromBotsOrClients(_playersOfBots);
Expand All @@ -87,18 +88,18 @@ private void InitializeBotsAndClientInServer(InitialMatchPlayerDatasGuid data)
if (HandlingClientsInServer)
{
var dataOfClients = data.Where(x => !x.IsBot).ToList();
OnClientsOnServerInit(new InitialMatchPlayerDatasGuid(dataOfClients));
elympicsBehavioursManager.OnClientsOnServerInit(new InitialMatchPlayerDatasGuid(dataOfClients));

_playersOfClients = dataOfClients.Select(x => x.Player).ToArray();
CallPlayerConnectedFromBotsOrClients(_playersOfClients);
}
}


private void CallPlayerConnectedFromBotsOrClients(ElympicsPlayer[] players)
private void CallPlayerConnectedFromBotsOrClients(IEnumerable<ElympicsPlayer> players)
{
foreach (var player in players)
OnPlayerConnected(player);
elympicsBehavioursManager.OnPlayerConnected(player);
}

protected override bool ShouldDoFixedUpdate() => Initialized && !(TickAnalysis?.Paused ?? false);
Expand Down
29 changes: 17 additions & 12 deletions Runtime/GameEngine/GameEngineAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

namespace Elympics
{
public class GameEngineAdapter : IGameEngine
internal class GameEngineAdapter : IGameEngine
{
internal ElympicsPlayer[] Players { get; private set; } = Array.Empty<ElympicsPlayer>();

Expand All @@ -25,7 +25,12 @@ public class GameEngineAdapter : IGameEngine
public event Action<ElympicsPlayer> PlayerConnected;
public event Action<ElympicsPlayer> PlayerDisconnected;

public event Action<InitialMatchPlayerDatasGuid> InitializedWithMatchPlayerDatas;
/// <remarks>
/// Invokes <see cref="Initialized"/> every time action passed in OnInitialized is called, but only the first call is meaningful.
/// There should be only one subscriber calling OnInitialized exactly once after it initializes.
/// </remarks>
internal event Action<(InitialMatchPlayerDatasGuid Data, Action OnInitialized)> ReceivedInitialMatchPlayerDatas;
internal event Action Initialized;

private IGameEngineLogger _logger;
private InitialMatchUserDatas _initialMatchUserDatas;
Expand All @@ -35,13 +40,13 @@ public class GameEngineAdapter : IGameEngine
private readonly LogHandler _logHandler;
private readonly int _playerInputBufferSize;

public readonly ConcurrentDictionary<ElympicsPlayer, ElympicsInput> LatestSimulatedTickInput =
internal readonly ConcurrentDictionary<ElympicsPlayer, ElympicsInput> LatestSimulatedTickInput =
new ConcurrentDictionary<ElympicsPlayer, ElympicsInput>();
public ConcurrentDictionary<ElympicsPlayer, ElympicsDataWithTickBuffer<ElympicsInput>> PlayerInputBuffers { get; } =
internal ConcurrentDictionary<ElympicsPlayer, ElympicsDataWithTickBuffer<ElympicsInput>> PlayerInputBuffers { get; } =
new ConcurrentDictionary<ElympicsPlayer, ElympicsDataWithTickBuffer<ElympicsInput>>();


public GameEngineAdapter(ElympicsGameConfig elympicsGameConfig, LogHandler logHandler)
internal GameEngineAdapter(ElympicsGameConfig elympicsGameConfig, LogHandler logHandler)
{
_playerInputBufferSize = elympicsGameConfig.PredictionBufferSize;
_logHandler = logHandler;
Expand All @@ -66,15 +71,15 @@ public void Init2(InitialMatchUserDatas initialMatchUserDatas)
PlayerInputBuffers[_userIdsToPlayers[userId]] = new ElympicsDataWithTickBuffer<ElympicsInput>(_playerInputBufferSize);

_initialMatchUserDatas = initialMatchUserDatas;
InitializedWithMatchPlayerDatas?.Invoke(new InitialMatchPlayerDatasGuid(initialMatchUserDatas.Select(x => new InitialMatchPlayerDataGuid
ReceivedInitialMatchPlayerDatas?.Invoke((new InitialMatchPlayerDatasGuid(initialMatchUserDatas.Select(x => new InitialMatchPlayerDataGuid
{
Player = _userIdsToPlayers[x.UserId],
UserId = new Guid(x.UserId),
IsBot = x.IsBot,
BotDifficulty = x.BotDifficulty,
GameEngineData = x.GameEngineData,
MatchmakerData = x.MatchmakerData
}).ToList()));
MatchmakerData = x.MatchmakerData,
}).ToList()), () => Initialized?.Invoke()));
// _logger.Info("Initialized from unity");
}

Expand Down Expand Up @@ -121,19 +126,19 @@ public void Tick(long tick)
/* Using unity FixedUpdate */
}

public void SetLatestSimulatedInputTick(ElympicsPlayer player, ElympicsInput elympicsInput)
internal void SetLatestSimulatedInputTick(ElympicsPlayer player, ElympicsInput elympicsInput)
{
LatestSimulatedTickInput[player] = elympicsInput;
}

public void SendSnapshotUnreliable(ElympicsSnapshot snapshot)
internal void SendSnapshotUnreliable(ElympicsSnapshot snapshot)
{
var serializedData = snapshot.Serialize();
foreach (var userData in _initialMatchUserDatas)
InGameDataForPlayerOnUnreliableChannelGenerated?.Invoke(serializedData, userData.UserId);
}

public void SendSnapshotsUnreliable(Dictionary<ElympicsPlayer, ElympicsSnapshot> snapshots)
internal void SendSnapshotsUnreliable(Dictionary<ElympicsPlayer, ElympicsSnapshot> snapshots)
{
foreach (var (player, snapshot) in snapshots)
{
Expand All @@ -143,7 +148,7 @@ public void SendSnapshotsUnreliable(Dictionary<ElympicsPlayer, ElympicsSnapshot>
}
}

public void EndGame(ResultMatchPlayerDatas result = null)
internal void EndGame(ResultMatchPlayerDatas result = null)
{
try
{
Expand Down
Binary file modified Runtime/GameEngine/Libraries/UnityConnectors-packed2.0.dll
Binary file not shown.
Binary file modified Runtime/GameEngine/Libraries/UnityConnectors-packed2.1.dll
Binary file not shown.
Binary file modified Runtime/GameEngine/Wrapper/GameBot.dll_
Binary file not shown.
Binary file modified Runtime/GameEngine/Wrapper/GameEngine.dll_
Binary file not shown.
Binary file modified Runtime/GameEngine/Wrapper/Google.Protobuf.dll_
Binary file not shown.
Binary file modified Runtime/GameEngine/Wrapper/Proto.dll_
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Threading;
using GameEngineCore.V1._3;
using UnityConnectors.HalfRemote;
using UnityEngine;
using Debug = UnityEngine.Debug;
using SimpleHttpSignalingServer = Plugins.Elympics.Runtime.Communication.HalfRemote.SimpleHttpSignalingServer;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
using UnityConnectors;
using System;
using UnityConnectors;

namespace Elympics
{
internal class OnlineGameServerInitializer : GameServerInitializer
{
private GameEngineAdapter _gameEngineAdapter;
private GameEngineProtoConnector _gameEngineProtoConnector;

protected override void InitializeGameServer(ElympicsGameConfig elympicsGameConfig, GameEngineAdapter gameEngineAdapter)
{
_gameEngineAdapter = gameEngineAdapter;
_gameEngineProtoConnector = new GameEngineProtoConnector(gameEngineAdapter);
_gameEngineAdapter.Initialized += SendInitialized;
_gameEngineProtoConnector.Connect();
}

Expand All @@ -17,5 +21,11 @@ public override void Dispose()
base.Dispose();
_gameEngineProtoConnector?.Dispose();
}

private void SendInitialized()
{
_gameEngineAdapter.Initialized -= SendInitialized;
_gameEngineProtoConnector.SendInitialized();
}
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "com.daftmobile.elympics",
"version": "0.7.0",
"version": "0.7.1",
"description": "Elympics is a complete toolset for multiplayer games. Learn more at https://elympics.cc/",
"displayName": "Elympics",
"unity": "2019.4",
Expand Down

0 comments on commit 3152876

Please sign in to comment.