parent
4978487e2e
commit
bc74dcd6ee
@ -0,0 +1,2 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:String x:Key="/Default/CodeInspection/Highlighting/SweaWarningsMode/@EntryValue">DoNotShowAndRun</s:String></wpf:ResourceDictionary>
|
@ -1,7 +1,7 @@
|
||||
ID: CriticalPathAnalyzer
|
||||
Name: CriticalPathAnalyzer
|
||||
Author: D4VID
|
||||
Version: 0.0.1
|
||||
Version: 0.0.2
|
||||
Priority: 0
|
||||
Dependencies:
|
||||
- HarmonyForLogicWorld
|
||||
|
@ -0,0 +1,10 @@
|
||||
using CriticalPathAnalyzer.Shared.Packets.S2C;
|
||||
using LogicWorld.SharedCode.Networking;
|
||||
|
||||
namespace CriticalPathAnalyzer.Client.Network {
|
||||
public class AnalyzePathResponseHandler : PacketHandler<AnalyzePathResponse> {
|
||||
public override void Handle(AnalyzePathResponse packet, HandlerContext context) {
|
||||
CriticalPathAnalyzerClient.OnAnalyzePathResponse(packet);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
using CriticalPathAnalyzer.Shared.Packets.S2C;
|
||||
using LogicWorld.SharedCode.Networking;
|
||||
|
||||
namespace CriticalPathAnalyzer.Client.Network {
|
||||
public class AnnounceModPacketHandler : PacketHandler<AnnounceModPresence> {
|
||||
public override void Handle(AnnounceModPresence packet, HandlerContext context) {
|
||||
CriticalPathAnalyzerClient.LoggerInstance.Info($"Mod is supported on the server: version={packet.Version}");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CriticalPathAnalyzer.Server.Network;
|
||||
using CriticalPathAnalyzer.Shared.Packets.S2C;
|
||||
using EccsLogicWorldAPI.Server.Injectors;
|
||||
using EccsLogicWorldAPI.Shared.PacketWrapper;
|
||||
using LogicAPI.Data;
|
||||
using LogicAPI.Networking;
|
||||
using LogicAPI.Networking.Packets.Initialization;
|
||||
using LogicAPI.Server;
|
||||
using LogicAPI.Server.Networking;
|
||||
using LogicAPI.Server.Networking.ClientVerification;
|
||||
using LogicLog;
|
||||
using LogicWorld.Server;
|
||||
using LogicWorld.SharedCode.Networking;
|
||||
|
||||
namespace CriticalPathAnalyzer.Server {
|
||||
public class CriticalPathAnalyzerServer : ServerMod, IClientVerifier {
|
||||
private const string ModId = "CriticalPathAnalyzer";
|
||||
private const string ModVersion = "0.0.2";
|
||||
|
||||
private NetworkServer _networkServer;
|
||||
private readonly Dictionary<string, bool> _playerHasWireTracer = new Dictionary<string, bool>();
|
||||
|
||||
public static ILogicLogger LoggerInstance;
|
||||
|
||||
protected override void Initialize() {
|
||||
Logger.Info("CriticalPathAnalyzer server mod loading");
|
||||
LoggerInstance = Logger;
|
||||
|
||||
_networkServer = Program.Get<NetworkServer>();
|
||||
if (_networkServer == null) {
|
||||
throw new Exception("Could not get Service 'NetworkServer'.");
|
||||
}
|
||||
|
||||
// Inject verifier:
|
||||
RawJoinVerifierInjector.addVerifier(this);
|
||||
PacketHandlerManager.getCustomPacketHandler<ClientLoadedWorldPacket>()
|
||||
.addHandlerToEnd(new ClientJoinedPacketHandler(this));
|
||||
RawPacketHandlerInjector.addPacketHandler(new CriticalPathAnalyzerRequestHandler(this));
|
||||
}
|
||||
|
||||
public void Verify(VerificationContext ctx) {
|
||||
bool hasMod = ctx.ApprovalPacket.ClientMods.Contains(ModId);
|
||||
string playerName = ctx.PlayerID.Name;
|
||||
_playerHasWireTracer[playerName] = hasMod;
|
||||
LoggerInstance.Info($"Verifying player {playerName}: hasMod={hasMod}");
|
||||
}
|
||||
|
||||
public void PlayerJoined(PlayerData playerData, HandlerContext context) {
|
||||
_playerHasWireTracer.TryGetValue(playerData.Name, out bool hasWireTracer);
|
||||
if (hasWireTracer) {
|
||||
_networkServer.Send(context.Sender, new AnnounceModPresence() {
|
||||
Version = ModVersion
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void AnalyzePath(Connection sender, Guid packetRequestGuid, PegAddress start, PegAddress end) {
|
||||
LoggerInstance.Info("Got AnalyzePath request");
|
||||
AnalyzePathResponse response = new AnalyzePathResponse() {
|
||||
RequestGuid = packetRequestGuid,
|
||||
Message = "Lmao Yeet",
|
||||
};
|
||||
_networkServer.Send(sender, response);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using CriticalPathAnalyzer.Shared.Packets.C2S;
|
||||
using LogicWorld.SharedCode.Networking;
|
||||
|
||||
namespace CriticalPathAnalyzer.Server.Network {
|
||||
public class CriticalPathAnalyzerRequestHandler : PacketHandler<AnalyzePathRequest> {
|
||||
private readonly CriticalPathAnalyzerServer _criticalPathAnalyzerServer;
|
||||
public CriticalPathAnalyzerRequestHandler(CriticalPathAnalyzerServer criticalPathAnalyzerServer) {
|
||||
_criticalPathAnalyzerServer = criticalPathAnalyzerServer;
|
||||
}
|
||||
|
||||
public override void Handle(AnalyzePathRequest packet, HandlerContext context) {
|
||||
_criticalPathAnalyzerServer.AnalyzePath(context.Sender, packet.RequestGuid, packet.StartPegAddress,
|
||||
packet.EndPegAddress);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using EccsLogicWorldAPI.Shared.PacketWrapper;
|
||||
using LogicAPI.Networking.Packets.Initialization;
|
||||
using LogicWorld.SharedCode.Networking;
|
||||
|
||||
namespace CriticalPathAnalyzer.Server.Network {
|
||||
public class ClientJoinedPacketHandler : CustomPacketHandler<ClientLoadedWorldPacket> {
|
||||
private readonly CriticalPathAnalyzerServer _criticalPathAnalyzerServer;
|
||||
public ClientJoinedPacketHandler(CriticalPathAnalyzerServer criticalPathAnalyzerServer) {
|
||||
_criticalPathAnalyzerServer = criticalPathAnalyzerServer;
|
||||
}
|
||||
|
||||
public override void handle(ref bool isCancelled, ref ClientLoadedWorldPacket packet, HandlerContext context) {
|
||||
_criticalPathAnalyzerServer.PlayerJoined(packet.PlayerData, context);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using LogicAPI.Data;
|
||||
using LogicAPI.Networking.Packets;
|
||||
using MessagePack;
|
||||
|
||||
namespace CriticalPathAnalyzer.Shared.Packets.C2S {
|
||||
[MessagePackObject]
|
||||
public class AnalyzePathRequest : Packet {
|
||||
[Key(0)] public Guid RequestGuid;
|
||||
[Key(1)] public PegAddress StartPegAddress;
|
||||
[Key(2)] public PegAddress EndPegAddress;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using LogicAPI.Networking.Packets;
|
||||
using MessagePack;
|
||||
|
||||
namespace CriticalPathAnalyzer.Shared.Packets.S2C {
|
||||
[MessagePackObject]
|
||||
public class AnalyzePathResponse : Packet {
|
||||
[Key(0)] public Guid RequestGuid;
|
||||
[Key(1)] public string Message;
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
using LogicAPI.Networking.Packets;
|
||||
using MessagePack;
|
||||
|
||||
namespace CriticalPathAnalyzer.Shared.Packets.S2C {
|
||||
[MessagePackObject]
|
||||
public class AnnounceModPresence : Packet {
|
||||
[Key(0)] public string Version;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue