From: AeonLucid Date: Sat, 24 Oct 2020 23:29:58 +0000 (+0200) Subject: Add meeting events X-Git-Tag: v1.2.2~96^2~2 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=0887bad5d8164ce8a61f3835c6776d005b876b82;p=rhonda%2Fimpostor.git Add meeting events --- diff --git a/src/Impostor.Api/Events/Game/MeetingEndedEvent.cs b/src/Impostor.Api/Events/Game/MeetingEndedEvent.cs new file mode 100644 index 0000000..01be941 --- /dev/null +++ b/src/Impostor.Api/Events/Game/MeetingEndedEvent.cs @@ -0,0 +1,18 @@ +using Impostor.Api.Games; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events +{ + public class MeetingEndedEvent : IEvent + { + public MeetingEndedEvent(IGame game, IInnerMeetingHud meetingHud) + { + Game = game; + MeetingHud = meetingHud; + } + + public IGame Game { get; } + + public IInnerMeetingHud MeetingHud { get; } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Events/Game/MeetingStartedEvent.cs b/src/Impostor.Api/Events/Game/MeetingStartedEvent.cs new file mode 100644 index 0000000..1265b5b --- /dev/null +++ b/src/Impostor.Api/Events/Game/MeetingStartedEvent.cs @@ -0,0 +1,18 @@ +using Impostor.Api.Games; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events +{ + public class MeetingStartedEvent : IEvent + { + public MeetingStartedEvent(IGame game, IInnerMeetingHud meetingHud) + { + Game = game; + MeetingHud = meetingHud; + } + + public IGame Game { get; } + + public IInnerMeetingHud MeetingHud { get; } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Net/Inner/Objects/IInnerMeetingHud.cs b/src/Impostor.Api/Net/Inner/Objects/IInnerMeetingHud.cs new file mode 100644 index 0000000..2976486 --- /dev/null +++ b/src/Impostor.Api/Net/Inner/Objects/IInnerMeetingHud.cs @@ -0,0 +1,7 @@ +namespace Impostor.Api.Net.Inner.Objects +{ + public interface IInnerMeetingHud + { + + } +} \ No newline at end of file diff --git a/src/Impostor.Plugins.Example/ExamplePlugin.cs b/src/Impostor.Plugins.Example/ExamplePlugin.cs index 8f75cc9..1482cd3 100644 --- a/src/Impostor.Plugins.Example/ExamplePlugin.cs +++ b/src/Impostor.Plugins.Example/ExamplePlugin.cs @@ -21,6 +21,7 @@ namespace Impostor.Plugins.Example eventManager.RegisterListener(new GameEventListener()); eventManager.RegisterListener(new PlayerEventListener()); + eventManager.RegisterListener(new MeetingEventListener()); } public override ValueTask EnableAsync() diff --git a/src/Impostor.Plugins.Example/Handlers/MeetingEventListener.cs b/src/Impostor.Plugins.Example/Handlers/MeetingEventListener.cs new file mode 100644 index 0000000..1b98c41 --- /dev/null +++ b/src/Impostor.Plugins.Example/Handlers/MeetingEventListener.cs @@ -0,0 +1,20 @@ +using System; +using Impostor.Api.Events; + +namespace Impostor.Plugins.Example.Handlers +{ + public class MeetingEventListener : IEventListener + { + [EventListener] + public void OnMeetingStarted(MeetingStartedEvent e) + { + Console.WriteLine("Meeting > started"); + } + + [EventListener] + public void OnMeetingEnded(MeetingEndedEvent e) + { + Console.WriteLine("Meeting > ended"); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj b/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj index 5f88c1c..582a9e8 100644 --- a/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj +++ b/src/Impostor.Plugins.Example/Impostor.Plugins.Example.csproj @@ -5,6 +5,6 @@ - + diff --git a/src/Impostor.Server/Impostor.Server.csproj b/src/Impostor.Server/Impostor.Server.csproj index 4dcf406..a1fdf6f 100644 --- a/src/Impostor.Server/Impostor.Server.csproj +++ b/src/Impostor.Server/Impostor.Server.csproj @@ -9,6 +9,7 @@ true icon.ico ProjectRules.ruleset + enable diff --git a/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs b/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs index c621add..d8e345f 100644 --- a/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs +++ b/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs @@ -1,5 +1,4 @@ -using System; -using System.Numerics; +using System.Numerics; using System.Threading.Tasks; using Impostor.Api; using Impostor.Api.Innersloth; @@ -53,7 +52,7 @@ namespace Impostor.Server.Net.Inner.Objects.Components return new Vector2(XRange.Lerp(v1), YRange.Lerp(v2)); } - public override async ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader) + public override ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader) { if (call == RpcCalls.SnapTo) { @@ -78,6 +77,8 @@ namespace Impostor.Server.Net.Inner.Objects.Components { _logger.LogWarning("{0}: Unknown rpc call {1}", nameof(InnerCustomNetworkTransform), call); } + + return default; } public override bool Serialize(IMessageWriter writer, bool initialState) diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.Api.cs b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.Api.cs new file mode 100644 index 0000000..5d120c5 --- /dev/null +++ b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.Api.cs @@ -0,0 +1,9 @@ +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Server.Net.Inner.Objects +{ + internal partial class InnerMeetingHud : IInnerMeetingHud + { + + } +} \ No newline at end of file diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs index 42c9518..439a050 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs @@ -2,6 +2,8 @@ using System.Linq; using System.Threading.Tasks; using Impostor.Api; +using Impostor.Api.Events; +using Impostor.Api.Events.Managers; using Impostor.Api.Net; using Impostor.Api.Net.Messages; using Impostor.Server.Net.State; @@ -12,13 +14,15 @@ namespace Impostor.Server.Net.Inner.Objects internal partial class InnerMeetingHud : InnerNetObject { private readonly ILogger _logger; + private readonly IEventManager _eventManager; private readonly Game _game; private readonly GameNet _gameNet; private PlayerVoteArea[] _playerStates; - public InnerMeetingHud(ILogger logger, Game game) + public InnerMeetingHud(ILogger logger, IEventManager eventManager, Game game) { _logger = logger; + _eventManager = eventManager; _game = game; _gameNet = game.GameNet; _playerStates = null; @@ -40,13 +44,14 @@ namespace Impostor.Server.Net.Inner.Objects .ToArray(); } - public override ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, - IMessageReader reader) + public override async ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader) { switch (call) { case RpcCalls.Close: { + Console.WriteLine("CLOSEEEE MEETING"); + if (!sender.IsHost) { throw new ImpostorCheatException($"Client sent {nameof(RpcCalls.Close)} but was not a host"); @@ -75,6 +80,9 @@ namespace Impostor.Server.Net.Inner.Objects var states = reader.ReadBytesAndSize(); var playerId = reader.ReadByte(); var tie = reader.ReadBoolean(); + + await _eventManager.CallAsync(new MeetingEndedEvent(_game, this)); + break; } @@ -108,8 +116,6 @@ namespace Impostor.Server.Net.Inner.Objects break; } } - - return default; } public override bool Serialize(IMessageWriter writer, bool initialState) diff --git a/src/Impostor.Server/Net/State/Game.Data.cs b/src/Impostor.Server/Net/State/Game.Data.cs index f3a8ff9..29d2069 100644 --- a/src/Impostor.Server/Net/State/Game.Data.cs +++ b/src/Impostor.Server/Net/State/Game.Data.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Impostor.Api; +using Impostor.Api.Events; using Impostor.Api.Events.Net; using Impostor.Api.Innersloth; using Impostor.Api.Net.Messages; @@ -103,6 +104,12 @@ namespace Impostor.Server.Net.State break; } + + case InnerMeetingHud meetingHud: + { + await _eventManager.CallAsync(new MeetingStartedEvent(this, meetingHud)); + break; + } } }