✨ 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> <PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
<IncludeSymbols>True</IncludeSymbols> <IncludeSymbols>True</IncludeSymbols>
<PackageProjectUrl>https://github.com/MeowCraftMC/CrystalConnector</PackageProjectUrl> <PackageProjectUrl>https://github.com/MeowCraftMC/CrystalConnector</PackageProjectUrl>
<Version>1.0.1</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.25.1" /> <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; using Google.Protobuf;
namespace CrystalConnector.Protocol.Packets.C2S; namespace CrystalConnector.Protocol.Packets.C2S;
public class PublishPacket : IPacket public class PublishPacket : IPacket
{ {
public NamespacedName Channel { get; set; } public NamespacedId Channel { get; set; }
public string Payload { get; set; } public string Payload { get; set; }
public PublishPacket(NamespacedName channel, string payload) public PublishPacket(NamespacedId channel, string payload)
{ {
Channel = channel; Channel = channel;
Payload = payload; Payload = payload;
@@ -26,7 +28,7 @@ public class PublishPacket : IPacket
public void Read(byte[] bytes) public void Read(byte[] bytes)
{ {
var message = Publish.Parser.ParseFrom(bytes); var message = Publish.Parser.ParseFrom(bytes);
Channel = message.Channel; Channel = message.Channel.ToId();
Payload = message.Payload; Payload = message.Payload;
} }
@@ -34,7 +36,7 @@ public class PublishPacket : IPacket
{ {
var message = new Publish var message = new Publish
{ {
Channel = Channel, Channel = Channel.ToName(),
Payload = Payload 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; using Google.Protobuf;
namespace CrystalConnector.Protocol.Packets.S2C; namespace CrystalConnector.Protocol.Packets.S2C;
@@ -6,17 +8,13 @@ namespace CrystalConnector.Protocol.Packets.S2C;
public class ForwardPacket : IPacket public class ForwardPacket : IPacket
{ {
public string Publisher { get; set; } public string Publisher { get; set; }
public NamespacedName Channel { get; set; } public NamespacedId Channel { get; set; }
public string Payload { 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; Publisher = publisher;
Channel = new NamespacedName Channel = channel;
{
Namespace = channel.Namespace,
Name = channel.Name
};
Payload = payload; Payload = payload;
} }
@@ -33,7 +31,7 @@ public class ForwardPacket : IPacket
{ {
var message = Forward.Parser.ParseFrom(bytes); var message = Forward.Parser.ParseFrom(bytes);
Publisher = message.Publisher; Publisher = message.Publisher;
Channel = message.Channel; Channel = message.Channel.ToId();
Payload = message.Payload; Payload = message.Payload;
} }
@@ -42,7 +40,11 @@ public class ForwardPacket : IPacket
var message = new Forward var message = new Forward
{ {
Publisher = Publisher, Publisher = Publisher,
Channel = Channel, Channel = new NamespacedName
{
Namespace = Channel.Namespace,
Name = Channel.Name
},
Payload = Payload Payload = Payload
}; };
+6
View File
@@ -6,6 +6,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConnectorTest", "ConnectorT
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrystalConnector.Protocol", "CrystalConnector.Protocol\CrystalConnector.Protocol.csproj", "{1769D402-129D-46D2-9347-70F3E875FE7B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrystalConnector.Protocol", "CrystalConnector.Protocol\CrystalConnector.Protocol.csproj", "{1769D402-129D-46D2-9347-70F3E875FE7B}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrystalConnector.Client", "CrystalConnector.Client\CrystalConnector.Client.csproj", "{DC40A2D9-1D24-4561-8C9C-DA7124BDD965}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU 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}.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.ActiveCfg = Release|Any CPU
{1769D402-129D-46D2-9347-70F3E875FE7B}.Release|Any CPU.Build.0 = 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 EndGlobalSection
EndGlobal EndGlobal
+3 -2
View File
@@ -1,10 +1,11 @@
using CrystalConnector.Protocol.Messages; using CrystalConnector.Protocol.Entities;
using CrystalConnector.Protocol.Messages;
namespace CrystalConnector.Connector; namespace CrystalConnector.Connector;
public class MessageChannel public class MessageChannel
{ {
public required (string Namespace, string Name) Id { get; set; } public required NamespacedId Id { get; set; }
public required MessageDirection Direction { get; set; } public required MessageDirection Direction { get; set; }
} }
@@ -1,4 +1,5 @@
using System.Net.WebSockets; using System.Net.WebSockets;
using CrystalConnector.Protocol.Entities;
using CrystalConnector.Protocol.Messages; using CrystalConnector.Protocol.Messages;
using CrystalConnector.Protocol.Packets.S2C; using CrystalConnector.Protocol.Packets.S2C;
using CrystalConnector.Utilities; using CrystalConnector.Utilities;
@@ -9,7 +10,7 @@ public class WebSocketConnectionManager
{ {
internal static Dictionary<WebSocket, WebSocketConnectionInfo> Info { get; } = new(); 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) 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); var packet = new ForwardPacket(origin, channel, payload);
@@ -30,17 +30,17 @@ public class WebSocketHandler
{ {
case AuthenticatePacket authenticatePacket: case AuthenticatePacket authenticatePacket:
{ {
var clientId = (authenticatePacket.ClientId.Namespace, authenticatePacket.ClientId.Name); var clientId = authenticatePacket.ClientId.ToId();
if (authenticatePacket.Key == Config.GetSecretKey()) if (authenticatePacket.Key == Config.GetSecretKey())
{ {
if (WebSocketConnectionManager.HaveClientRegistered(clientId)) 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); 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(); var connectionInfo = webSocket.GetConnectionInfo();
@@ -52,7 +52,7 @@ public class WebSocketHandler
foreach (var channel in authenticatePacket.Channels) foreach (var channel in authenticatePacket.Channels)
{ {
var id = channel.Id.ToTuple(); var id = channel.Id.ToId();
if (channels.TryGetValue(id, out var chan)) if (channels.TryGetValue(id, out var chan))
{ {
chan.Direction = channel.Direction; chan.Direction = channel.Direction;
@@ -70,13 +70,13 @@ public class WebSocketHandler
return new ResultPacket(); 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); return new ResultPacket(Error.Unauthenticated);
} }
case PublishPacket publishPacket: case PublishPacket publishPacket:
{ {
var connectionInfo = webSocket.GetConnectionInfo(); var connectionInfo = webSocket.GetConnectionInfo();
var id = publishPacket.Channel.ToTuple(); var id = publishPacket.Channel;
if (!connectionInfo.Authenticated) if (!connectionInfo.Authenticated)
{ {
@@ -88,7 +88,7 @@ public class WebSocketHandler
|| registered.Direction == MessageDirection.All) || registered.Direction == MessageDirection.All)
{ {
Logger.LogWarning("Channel {Channel}(Direction: {Direction}) have not been registered by Client {Name}({Id})", 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); return new ResultPacket(Error.UnregisteredChannel);
} }
@@ -98,7 +98,7 @@ public class WebSocketHandler
if (Config.IsDebug()) if (Config.IsDebug())
{ {
Logger.LogDebug("Client {Name}({Id}) send data in {Channel}: {Data}", 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(); return new ResultPacket();
@@ -1,5 +1,6 @@
using System.Net; using System.Net;
using CrystalConnector.Connector; using CrystalConnector.Connector;
using CrystalConnector.Protocol.Entities;
namespace CrystalConnector.Utilities; namespace CrystalConnector.Utilities;
@@ -13,9 +14,9 @@ public class WebSocketConnectionInfo
public string? Name { get; set; } 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 bool Authenticated { get; set; } = false;
public Dictionary<(string Namespace, string Name), MessageChannel> RegisteredChannels { get; } = new(); public Dictionary<NamespacedId, MessageChannel> RegisteredChannels { get; } = new();
} }