✨ Fix entity.

Signed-off-by: 秋雨落 <i@rain.cx>
This commit is contained in:
秋雨落
2024-01-10 10:46:56 +08:00
parent 32ed6c3b1d
commit 783e850de5
8 changed files with 43 additions and 29 deletions
@@ -10,6 +10,7 @@
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
<IncludeSymbols>True</IncludeSymbols>
<PackageProjectUrl>https://github.com/MeowCraftMC/CrystalConnector</PackageProjectUrl>
<Version>1.0.1</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.25.1" />
@@ -1,14 +1,16 @@
using CrystalConnector.Protocol.Messages;
using CrystalConnector.Protocol.Entities;
using CrystalConnector.Protocol.Messages;
using CrystalConnector.Protocol.Utilities;
using Google.Protobuf;
namespace CrystalConnector.Protocol.Packets.C2S;
public class PublishPacket : IPacket
{
public NamespacedName Channel { get; set; }
public NamespacedId Channel { get; set; }
public string Payload { get; set; }
public PublishPacket(NamespacedName channel, string payload)
public PublishPacket(NamespacedId channel, string payload)
{
Channel = channel;
Payload = payload;
@@ -26,7 +28,7 @@ public class PublishPacket : IPacket
public void Read(byte[] bytes)
{
var message = Publish.Parser.ParseFrom(bytes);
Channel = message.Channel;
Channel = message.Channel.ToId();
Payload = message.Payload;
}
@@ -34,7 +36,7 @@ public class PublishPacket : IPacket
{
var message = new Publish
{
Channel = Channel,
Channel = Channel.ToName(),
Payload = Payload
};
@@ -1,4 +1,6 @@
using CrystalConnector.Protocol.Messages;
using CrystalConnector.Protocol.Entities;
using CrystalConnector.Protocol.Messages;
using CrystalConnector.Protocol.Utilities;
using Google.Protobuf;
namespace CrystalConnector.Protocol.Packets.S2C;
@@ -6,17 +8,13 @@ namespace CrystalConnector.Protocol.Packets.S2C;
public class ForwardPacket : IPacket
{
public string Publisher { get; set; }
public NamespacedName Channel { get; set; }
public NamespacedId Channel { get; set; }
public string Payload { get; set; }
public ForwardPacket(string publisher, (string Namespace, string Name) channel, string payload)
public ForwardPacket(string publisher, NamespacedId channel, string payload)
{
Publisher = publisher;
Channel = new NamespacedName
{
Namespace = channel.Namespace,
Name = channel.Name
};
Channel = channel;
Payload = payload;
}
@@ -33,7 +31,7 @@ public class ForwardPacket : IPacket
{
var message = Forward.Parser.ParseFrom(bytes);
Publisher = message.Publisher;
Channel = message.Channel;
Channel = message.Channel.ToId();
Payload = message.Payload;
}
@@ -42,7 +40,11 @@ public class ForwardPacket : IPacket
var message = new Forward
{
Publisher = Publisher,
Channel = Channel,
Channel = new NamespacedName
{
Namespace = Channel.Namespace,
Name = Channel.Name
},
Payload = Payload
};
+6
View File
@@ -6,6 +6,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorTest", "ConnectorT
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrystalConnector.Protocol", "CrystalConnector.Protocol\CrystalConnector.Protocol.csproj", "{1769D402-129D-46D2-9347-70F3E875FE7B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrystalConnector.Client", "CrystalConnector.Client\CrystalConnector.Client.csproj", "{DC40A2D9-1D24-4561-8C9C-DA7124BDD965}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -24,5 +26,9 @@ Global
{1769D402-129D-46D2-9347-70F3E875FE7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1769D402-129D-46D2-9347-70F3E875FE7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1769D402-129D-46D2-9347-70F3E875FE7B}.Release|Any CPU.Build.0 = Release|Any CPU
{DC40A2D9-1D24-4561-8C9C-DA7124BDD965}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC40A2D9-1D24-4561-8C9C-DA7124BDD965}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC40A2D9-1D24-4561-8C9C-DA7124BDD965}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC40A2D9-1D24-4561-8C9C-DA7124BDD965}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
+3 -2
View File
@@ -1,10 +1,11 @@
using CrystalConnector.Protocol.Messages;
using CrystalConnector.Protocol.Entities;
using CrystalConnector.Protocol.Messages;
namespace CrystalConnector.Connector;
public class MessageChannel
{
public required (string Namespace, string Name) Id { get; set; }
public required NamespacedId Id { get; set; }
public required MessageDirection Direction { get; set; }
}
@@ -1,4 +1,5 @@
using System.Net.WebSockets;
using CrystalConnector.Protocol.Entities;
using CrystalConnector.Protocol.Messages;
using CrystalConnector.Protocol.Packets.S2C;
using CrystalConnector.Utilities;
@@ -9,7 +10,7 @@ public class WebSocketConnectionManager
{
internal static Dictionary<WebSocket, WebSocketConnectionInfo> Info { get; } = new();
public static bool HaveClientRegistered((string Namespace, string Name) client)
public static bool HaveClientRegistered(NamespacedId client)
{
foreach (var (_, info) in Info)
{
@@ -30,7 +31,7 @@ public class WebSocketConnectionManager
}
}
public static async Task Broadcast(string origin, (string Namespace, string Name) channel, string payload, bool allowUnauthenticated = false)
public static async Task Broadcast(string origin, NamespacedId channel, string payload, bool allowUnauthenticated = false)
{
var packet = new ForwardPacket(origin, channel, payload);
@@ -30,17 +30,17 @@ public class WebSocketHandler
{
case AuthenticatePacket authenticatePacket:
{
var clientId = (authenticatePacket.ClientId.Namespace, authenticatePacket.ClientId.Name);
var clientId = authenticatePacket.ClientId.ToId();
if (authenticatePacket.Key == Config.GetSecretKey())
{
if (WebSocketConnectionManager.HaveClientRegistered(clientId))
{
Logger.LogInformation("Client {Id} tried authorize with name {Name}, but it is already authorized!", clientId.ToIdString(), authenticatePacket.ClientName);
Logger.LogInformation("Client {Id} tried authorize with name {Name}, but it is already authorized!", clientId, authenticatePacket.ClientName);
return new ResultPacket(Error.NameExists);
}
Logger.LogInformation("Client {Name}({Id}) authorized", authenticatePacket.ClientName, clientId.ToIdString());
Logger.LogInformation("Client {Name}({Id}) authorized", authenticatePacket.ClientName, clientId);
var connectionInfo = webSocket.GetConnectionInfo();
@@ -52,7 +52,7 @@ public class WebSocketHandler
foreach (var channel in authenticatePacket.Channels)
{
var id = channel.Id.ToTuple();
var id = channel.Id.ToId();
if (channels.TryGetValue(id, out var chan))
{
chan.Direction = channel.Direction;
@@ -70,13 +70,13 @@ public class WebSocketHandler
return new ResultPacket();
}
Logger.LogWarning("Client {Name}({Id}) auth failed with wrong key!", authenticatePacket.ClientName, clientId.ToIdString());
Logger.LogWarning("Client {Name}({Id}) auth failed with wrong key!", authenticatePacket.ClientName, clientId);
return new ResultPacket(Error.Unauthenticated);
}
case PublishPacket publishPacket:
{
var connectionInfo = webSocket.GetConnectionInfo();
var id = publishPacket.Channel.ToTuple();
var id = publishPacket.Channel;
if (!connectionInfo.Authenticated)
{
@@ -88,7 +88,7 @@ public class WebSocketHandler
|| registered.Direction == MessageDirection.All)
{
Logger.LogWarning("Channel {Channel}(Direction: {Direction}) have not been registered by Client {Name}({Id})",
id.ToIdString(), MessageDirection.Outgoing, webSocket.GetConnectionInfo().Name, webSocket.GetConnectionInfo().Id);
id, MessageDirection.Outgoing, webSocket.GetConnectionInfo().Name, webSocket.GetConnectionInfo().Id);
return new ResultPacket(Error.UnregisteredChannel);
}
@@ -98,7 +98,7 @@ public class WebSocketHandler
if (Config.IsDebug())
{
Logger.LogDebug("Client {Name}({Id}) send data in {Channel}: {Data}",
name, webSocket.GetConnectionInfo().ClientId!.Value.ToIdString(), id.ToIdString(), publishPacket.Payload);
name, webSocket.GetConnectionInfo().ClientId, id, publishPacket.Payload);
}
return new ResultPacket();
@@ -1,5 +1,6 @@
using System.Net;
using CrystalConnector.Connector;
using CrystalConnector.Protocol.Entities;
namespace CrystalConnector.Utilities;
@@ -13,9 +14,9 @@ public class WebSocketConnectionInfo
public string? Name { get; set; }
public (string Namespace, string Name)? ClientId { get; set; }
public NamespacedId? ClientId { get; set; }
public bool Authenticated { get; set; } = false;
public Dictionary<(string Namespace, string Name), MessageChannel> RegisteredChannels { get; } = new();
public Dictionary<NamespacedId, MessageChannel> RegisteredChannels { get; } = new();
}