From e9ea621b93fbb58d9edfca8375918791637bbd52 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 30 Dec 2020 20:59:04 +0800 Subject: +init --- Impostor-dev/src/Impostor.Server/Net/ClientBase.cs | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Impostor-dev/src/Impostor.Server/Net/ClientBase.cs (limited to 'Impostor-dev/src/Impostor.Server/Net/ClientBase.cs') diff --git a/Impostor-dev/src/Impostor.Server/Net/ClientBase.cs b/Impostor-dev/src/Impostor.Server/Net/ClientBase.cs new file mode 100644 index 0000000..5279192 --- /dev/null +++ b/Impostor-dev/src/Impostor.Server/Net/ClientBase.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Threading.Tasks; +using Impostor.Api.Innersloth; +using Impostor.Api.Net; +using Impostor.Api.Net.Messages; +using Impostor.Api.Net.Messages.S2C; +using Impostor.Hazel; +using Impostor.Server.Net.State; + +namespace Impostor.Server.Net +{ + internal abstract class ClientBase : IClient + { + protected ClientBase(string name, IHazelConnection connection) + { + Name = name; + Connection = connection; + Items = new ConcurrentDictionary(); + } + + public int Id { get; set; } + + public string Name { get; } + + public IHazelConnection Connection { get; } + + public IDictionary Items { get; } + + public ClientPlayer? Player { get; set; } + + IClientPlayer? IClient.Player => Player; + + public abstract ValueTask HandleMessageAsync(IMessageReader message, MessageType messageType); + + public abstract ValueTask HandleDisconnectAsync(string reason); + + + public async ValueTask DisconnectAsync(DisconnectReason reason, string? message = null) + { + if (!Connection.IsConnected) + { + return; + } + + using var packet = MessageWriter.Get(MessageType.Reliable); + Message01JoinGameS2C.SerializeError(packet, false, reason, message); + + await Connection.SendAsync(packet); + + // Need this to show the correct message, otherwise it shows a generic disconnect message. + await Task.Delay(TimeSpan.FromMilliseconds(250)); + + await Connection.DisconnectAsync(message ?? reason.ToString()); + } + } +} -- cgit v1.1-26-g67d0