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
|
ID: CriticalPathAnalyzer
|
||||||
Name: CriticalPathAnalyzer
|
Name: CriticalPathAnalyzer
|
||||||
Author: D4VID
|
Author: D4VID
|
||||||
Version: 0.0.1
|
Version: 0.0.2
|
||||||
Priority: 0
|
Priority: 0
|
||||||
Dependencies:
|
Dependencies:
|
||||||
- HarmonyForLogicWorld
|
- 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