This commit is contained in:
Mister_Nebula 2020-08-15 20:32:58 +01:00
parent 3693dd25be
commit 4fc6d55537
19 changed files with 173 additions and 22 deletions

View File

@ -13,6 +13,12 @@ namespace QSB.Animation
GlobalMessenger.AddListener(EventNames.RemoveSuit, () => SendEvent(CreateMessage(false)));
}
public override void CloseListener()
{
GlobalMessenger.RemoveListener(EventNames.SuitUp, () => SendEvent(CreateMessage(true)));
GlobalMessenger.RemoveListener(EventNames.RemoveSuit, () => SendEvent(CreateMessage(false)));
}
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
{
SenderId = LocalPlayerId,

View File

@ -13,6 +13,11 @@ namespace QSB.DeathSync
GlobalMessenger<DeathType>.AddListener(EventNames.QSBPlayerDeath, type => SendEvent(CreateMessage(type)));
}
public override void CloseListener()
{
GlobalMessenger<DeathType>.RemoveListener(EventNames.QSBPlayerDeath, type => SendEvent(CreateMessage(type)));
}
private PlayerDeathMessage CreateMessage(DeathType type) => new PlayerDeathMessage
{
SenderId = LocalPlayerId,

View File

@ -13,6 +13,11 @@ namespace QSB.ElevatorSync
GlobalMessenger<int, ElevatorDirection>.AddListener(EventNames.QSBStartLift, (id, direction) => SendEvent(CreateMessage(id, direction)));
}
public override void CloseListener()
{
GlobalMessenger<int, ElevatorDirection>.RemoveListener(EventNames.QSBStartLift, (id, direction) => SendEvent(CreateMessage(id, direction)));
}
private ElevatorMessage CreateMessage(int id, ElevatorDirection direction) => new ElevatorMessage
{
SenderId = PlayerRegistry.LocalPlayer.NetId,

View File

@ -1,10 +1,16 @@
using QSB.Animation;
using OWML.ModHelper.Events;
using QSB.Animation;
using QSB.DeathSync;
using QSB.ElevatorSync;
using QSB.GeyserSync;
using QSB.Messaging;
using QSB.TimeSync;
using QSB.Tools;
using QSB.TransformSync;
using QSB.Utility;
using System.Collections.Generic;
using UnityEngine.Assertions.Must;
using UnityEngine.Networking;
namespace QSB.Events
{
@ -15,25 +21,51 @@ namespace QSB.Events
{
public static bool Ready { get; private set; }
private static List<object> _eventList = new List<object>();
public static void Init()
{
new PlayerReadyEvent();
new PlayerSuitEvent();
new PlayerFlashlightEvent();
new PlayerSignalscopeEvent();
new PlayerTranslatorEvent();
new PlayerProbeLauncherEvent();
new PlayerProbeEvent();
new PlayerSectorEvent();
new PlayerJoinEvent();
new PlayerLeaveEvent();
new PlayerDeathEvent();
new PlayerStatesRequestEvent();
new ElevatorEvent();
new GeyserEvent();
new ServerTimeEvent();
_eventList = new List<object>
{
new PlayerReadyEvent(),
new PlayerSuitEvent(),
new PlayerFlashlightEvent(),
new PlayerSignalscopeEvent(),
new PlayerTranslatorEvent(),
new PlayerProbeLauncherEvent(),
new PlayerProbeEvent(),
new PlayerSectorEvent(),
new PlayerLeaveEvent(),
new PlayerDeathEvent(),
new PlayerStatesRequestEvent(),
new ElevatorEvent(),
new GeyserEvent(),
new ServerTimeEvent()
};
var join = new PlayerJoinEvent();
join.CloseListener();
GlobalMessenger<string>.AddListener(EventNames.QSBPlayerJoin, Write);
GlobalMessenger<string>.RemoveListener(EventNames.QSBPlayerJoin, Write);
Ready = true;
}
public static void Write(string test)
{
DebugLog.ToConsole("GET EVENT");
}
public static void Reset()
{
Ready = false;
foreach (var item in _eventList)
{
DebugLog.ToConsole("Closing listener for " + item.GetType().Name);
item.Invoke("CloseListener");
}
_eventList = new List<object>();
}
}
}

View File

@ -1,6 +1,10 @@
using QSB.Messaging;
using QSB.TransformSync;
using QSB.Utility;
using OWML.ModHelper.Events;
using System;
using System.Reflection;
using System.Collections;
namespace QSB.Events
{
@ -10,7 +14,19 @@ namespace QSB.Events
public override void SetupListener()
{
GlobalMessenger<string>.AddListener(EventNames.QSBPlayerJoin, name => SendEvent(CreateMessage(name)));
GlobalMessenger<string>.AddListener(EventNames.QSBPlayerJoin, name => StartSendEvent(CreateMessage(name)));
}
public override void CloseListener()
{
DebugLog.ToConsole("Close listener for join event");
GlobalMessenger<string>.RemoveListener(EventNames.QSBPlayerJoin, name => StartSendEvent(CreateMessage(name)));
}
private void StartSendEvent(PlayerJoinMessage message)
{
DebugLog.ToConsole("Got fire event for player join, sending message");
SendEvent(message);
}
private PlayerJoinMessage CreateMessage(string name) => new PlayerJoinMessage
@ -29,6 +45,7 @@ namespace QSB.Events
public override void OnReceiveLocal(PlayerJoinMessage message)
{
DebugLog.ToConsole($"OnReceiveLocal player join event, from {message.SenderId}");
var player = PlayerRegistry.CreatePlayer(PlayerTransformSync.LocalInstance.netId.Value);
player.Name = message.PlayerName;
var text = $"Connected to server as {player.Name}.";

View File

@ -15,6 +15,11 @@ namespace QSB.Events
GlobalMessenger<uint, uint[]>.AddListener(EventNames.QSBPlayerLeave, (id, objects) => SendEvent(CreateMessage(id, objects)));
}
public override void CloseListener()
{
GlobalMessenger<uint, uint[]>.RemoveListener(EventNames.QSBPlayerLeave, (id, objects) => SendEvent(CreateMessage(id, objects)));
}
private PlayerLeaveMessage CreateMessage(uint id, uint[] objects) => new PlayerLeaveMessage
{
SenderId = id,

View File

@ -1,4 +1,5 @@
using QSB.Messaging;
using QSB.Utility;
namespace QSB.Events
{
@ -11,6 +12,12 @@ namespace QSB.Events
GlobalMessenger<bool>.AddListener(EventNames.QSBPlayerReady, ready => SendEvent(CreateMessage(ready)));
}
public override void CloseListener()
{
DebugLog.ToConsole("Close listener for ready event");
GlobalMessenger<bool>.RemoveListener(EventNames.QSBPlayerReady, ready => SendEvent(CreateMessage(ready)));
}
private ToggleMessage CreateMessage(bool ready) => new ToggleMessage
{
SenderId = LocalPlayerId,

View File

@ -13,6 +13,11 @@ namespace QSB.Events
GlobalMessenger.AddListener(EventNames.QSBPlayerStatesRequest, () => SendEvent(CreateMessage()));
}
public override void CloseListener()
{
GlobalMessenger.RemoveListener(EventNames.QSBPlayerStatesRequest, () => SendEvent(CreateMessage()));
}
private PlayerMessage CreateMessage() => new PlayerMessage
{
SenderId = PlayerTransformSync.LocalInstance.netId.Value

View File

@ -36,6 +36,11 @@ namespace QSB.Events
/// </summary>
public abstract void SetupListener();
/// <summary>
/// Called to remove all set up activators.
/// </summary>
public abstract void CloseListener();
/// <summary>
/// Called on every client that didn't send the event.
/// </summary>
@ -58,20 +63,25 @@ namespace QSB.Events
/// <param name="message"></param>
public virtual void OnServerReceive(T message)
{
DebugLog.ToConsole("server get message");
_eventHandler.SendToAll(message);
}
public void SendEvent(T message)
{
DebugLog.ToConsole("Starting wait to send event...");
UnityHelper.Instance.RunWhen(() => PlayerTransformSync.LocalInstance != null, () => Send(message));
}
private void Send(T message)
{
DebugLog.ToConsole("sending event!");
_eventHandler.SendToServer(message);
}
private void OnClientReceive(T message)
{
DebugLog.ToConsole("Got event!");
if (PlayerRegistry.IsBelongingToLocalPlayer(message.SenderId))
{
OnReceiveLocal(message);

View File

@ -13,6 +13,11 @@ namespace QSB.GeyserSync
GlobalMessenger<int, bool>.AddListener(EventNames.QSBGeyserState, (id, state) => SendEvent(CreateMessage(id, state)));
}
public override void CloseListener()
{
GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBGeyserState, (id, state) => SendEvent(CreateMessage(id, state)));
}
private GeyserMessage CreateMessage(int id, bool state) => new GeyserMessage
{
SenderId = PlayerRegistry.LocalPlayer.NetId,

View File

@ -1,4 +1,5 @@
using System;
using QSB.Utility;
using System;
using UnityEngine.Networking;
namespace QSB.Messaging
@ -26,6 +27,7 @@ namespace QSB.Messaging
private void Init()
{
DebugLog.ToConsole($"Registering handler on server id {NetworkServer.serverHostId}");
NetworkServer.RegisterHandler((short)_messageType, OnServerReceiveMessageHandler);
NetworkManager.singleton.client.RegisterHandler((short)_messageType, OnClientReceiveMessageHandler);
}

View File

@ -117,6 +117,7 @@ namespace QSB
public override void OnClientConnect(NetworkConnection connection) // Called on the client when connecting to a server
{
DebugLog.ToConsole("OnClientConnect (connected to server)");
base.OnClientConnect(connection);
gameObject.AddComponent<SectorSync>();
@ -137,16 +138,22 @@ namespace QSB
UnityHelper.Instance.RunWhen(() => PlayerTransformSync.LocalInstance != null, EventList.Init);
UnityHelper.Instance.RunWhen(() => EventList.Ready,
() => GlobalMessenger<string>.FireEvent(EventNames.QSBPlayerJoin, _playerName));
UnityHelper.Instance.RunWhen(() => EventList.Ready, () => FireJoinEvent());
}
private void FireJoinEvent()
{
DebugLog.ToConsole("Firing join event!");
GlobalMessenger<string>.FireEvent(EventNames.QSBPlayerJoin, _playerName);
}
public override void OnStopClient() // Called on the client when closing connection
{
DebugLog.ToScreen("OnStopClient");
DebugLog.ToConsole("OnStopClient (disconnecting from server)");
Destroy(GetComponent<SectorSync>());
Destroy(GetComponent<RespawnOnDeath>());
Destroy(GetComponent<PreventShipDestruction>());
EventList.Reset();
if (IsClientConnected())
{
PlayerTransformSync.LocalInstance.gameObject.GetComponent<AnimationSync>().Reset();
@ -156,7 +163,7 @@ namespace QSB
public override void OnServerDisconnect(NetworkConnection connection) // Called on the server when any client disconnects
{
DebugLog.ToScreen("OnServerDisconnect");
DebugLog.ToConsole("OnServerDisconnect");
var playerId = connection.playerControllers[0].gameObject.GetComponent<PlayerTransformSync>().netId.Value;
var objectIds = connection.clientOwnedObjects.Select(x => x.Value).ToArray();
@ -165,6 +172,11 @@ namespace QSB
base.OnServerDisconnect(connection);
}
public override void OnStopServer()
{
NetworkServer.Reset();
}
private void OnGUI()
{
GUI.Label(new Rect(10, 10, 200f, 20f), "Name:");

View File

@ -12,6 +12,11 @@ namespace QSB.TimeSync
GlobalMessenger<float, int>.AddListener(EventNames.QSBServerTime, (time, count) => SendEvent(CreateMessage(time, count)));
}
public override void CloseListener()
{
GlobalMessenger<float, int>.RemoveListener(EventNames.QSBServerTime, (time, count) => SendEvent(CreateMessage(time, count)));
}
private ServerTimeMessage CreateMessage(float time, int count) => new ServerTimeMessage
{
SenderId = PlayerRegistry.LocalPlayer.NetId,

View File

@ -13,6 +13,12 @@ namespace QSB.Tools
GlobalMessenger.AddListener(EventNames.TurnOffFlashlight, () => SendEvent(CreateMessage(false)));
}
public override void CloseListener()
{
GlobalMessenger.RemoveListener(EventNames.TurnOnFlashlight, () => SendEvent(CreateMessage(true)));
GlobalMessenger.RemoveListener(EventNames.TurnOffFlashlight, () => SendEvent(CreateMessage(false)));
}
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
{
SenderId = LocalPlayerId,

View File

@ -13,6 +13,12 @@ namespace QSB.Tools
GlobalMessenger<SurveyorProbe>.AddListener(EventNames.RetrieveProbe, probe => SendEvent(CreateMessage(false)));
}
public override void CloseListener()
{
GlobalMessenger<SurveyorProbe>.RemoveListener(EventNames.LaunchProbe, probe => SendEvent(CreateMessage(true)));
GlobalMessenger<SurveyorProbe>.RemoveListener(EventNames.RetrieveProbe, probe => SendEvent(CreateMessage(false)));
}
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
{
SenderId = LocalPlayerId,

View File

@ -14,6 +14,12 @@ namespace QSB.Tools
GlobalMessenger<ProbeLauncher>.AddListener(EventNames.ProbeLauncherUnequipped, var => SendEvent(CreateMessage(false)));
}
public override void CloseListener()
{
GlobalMessenger<ProbeLauncher>.RemoveListener(EventNames.ProbeLauncherEquipped, var => SendEvent(CreateMessage(true)));
GlobalMessenger<ProbeLauncher>.RemoveListener(EventNames.ProbeLauncherUnequipped, var => SendEvent(CreateMessage(false)));
}
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
{
SenderId = LocalPlayerId,

View File

@ -14,6 +14,12 @@ namespace QSB.Tools
GlobalMessenger.AddListener(EventNames.UnequipSignalscope, () => SendEvent(CreateMessage(false)));
}
public override void CloseListener()
{
GlobalMessenger<Signalscope>.RemoveListener(EventNames.EquipSignalscope, var => SendEvent(CreateMessage(true)));
GlobalMessenger.RemoveListener(EventNames.UnequipSignalscope, () => SendEvent(CreateMessage(false)));
}
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
{
SenderId = LocalPlayerId,

View File

@ -14,6 +14,12 @@ namespace QSB.Tools
GlobalMessenger.AddListener(EventNames.UnequipTranslator, () => SendEvent(CreateMessage(false)));
}
public override void CloseListener()
{
GlobalMessenger.RemoveListener(EventNames.EquipTranslator, () => SendEvent(CreateMessage(true)));
GlobalMessenger.RemoveListener(EventNames.UnequipTranslator, () => SendEvent(CreateMessage(false)));
}
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
{
SenderId = LocalPlayerId,

View File

@ -13,6 +13,11 @@ namespace QSB.TransformSync
GlobalMessenger<uint, Sector.Name, string>.AddListener(EventNames.QSBSectorChange, (netId, sectorId, sectorName) => SendEvent(CreateMessage(netId, sectorId, sectorName)));
}
public override void CloseListener()
{
GlobalMessenger<uint, Sector.Name, string>.RemoveListener(EventNames.QSBSectorChange, (netId, sectorId, sectorName) => SendEvent(CreateMessage(netId, sectorId, sectorName)));
}
private SectorMessage CreateMessage(uint netId, Sector.Name sectorId, string sectorName) => new SectorMessage
{
SenderId = netId,