diff options
Diffstat (limited to 'NetClient.cs')
| -rw-r--r-- | NetClient.cs | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/NetClient.cs b/NetClient.cs index 65fd484..f7d14a1 100644 --- a/NetClient.cs +++ b/NetClient.cs @@ -17,6 +17,11 @@ class Client readonly Dictionary<int, User> users = []; public ReadOnlyDictionary<int, User> Users => users.AsReadOnly(); + static public Action<User>? UserConnected; + static public Action<User>? UserDisconnected; + static public Action<NetDataReader, User, PacketType>? PacketRecived; + static public Action? ServerDisconnected; + public Client(string ServerAddress, int port, string ServerPassword) { if (ServerAddress == "") throw new Exception("Server Address invalid!"); @@ -32,7 +37,7 @@ class Client NetDataWriter writer = new(); writer.Put(new PacketInfo(PacketType.OnekoSpritesheet, Id)); - writer.Put(Oneko.LocalOneko!.SpriteSheet.Serialize()); + writer.Put(OnekoLocal.Instance!.SpriteSheet.Serialize()); peer.Send(writer, DeliveryMethod.ReliableUnordered); writer.ResetWithInfo(new PacketInfo(PacketType.Username, Id)); @@ -40,6 +45,12 @@ class Client peer.Send(writer, DeliveryMethod.ReliableUnordered); }; + Listener.PeerDisconnectedEvent += (peer, info) => { + ServerDisconnected?.Invoke(); + users.Clear(); + Console.WriteLine("Server Disconnected! You're offline!"); + }; + Listener.NetworkReceiveEvent += (fromPeer, reader, channel, DeliveryMethod) => { if (reader.AvailableBytes < PacketInfo.SizeOf) return; PacketInfo info = reader.GetPacketInfo(); @@ -56,15 +67,25 @@ class Client } if (info.Type == PacketType.Disconnect) { + //Disconnect user that has disconnected if (from.Username != null) Console.WriteLine($"User {from.Username} left."); users.Remove(info.FromId); + UserDisconnected?.Invoke(from); + return; } - if (info.Type == PacketType.OnekoSpritesheet) from.SpriteSheet = reader.GetRemainingBytes(); - if (info.Type == PacketType.Username) { - from.Username = reader.GetString(); + else if (info.Type == PacketType.OnekoSpritesheet) from.SpriteSheet = reader.GetRemainingBytes(); + else if (info.Type == PacketType.Username) from.Username = reader.GetString(); + + if (from.ExchangedData && !from.Initialized) { + //Announce user connection Console.WriteLine($"User {from.Username} joined!"); + from.Initialized = true; + UserConnected?.Invoke(from); } + + NetDataReader newReader = new(reader.GetRemainingBytes()); + PacketRecived?.Invoke(newReader, from, info.Type); }; } |
