summaryrefslogtreecommitdiff
path: root/NetClient.cs
diff options
context:
space:
mode:
Diffstat (limited to 'NetClient.cs')
-rw-r--r--NetClient.cs35
1 files changed, 23 insertions, 12 deletions
diff --git a/NetClient.cs b/NetClient.cs
index 492c459..804be86 100644
--- a/NetClient.cs
+++ b/NetClient.cs
@@ -14,12 +14,12 @@ class Client
readonly NetManager NetClient;
public NetPeer ConnectedServer => NetClient.FirstPeer;
- readonly Dictionary<int, User> users = [];
- public ReadOnlyDictionary<int, User> Users => users.AsReadOnly();
+ readonly Dictionary<int, ClientUser> users = [];
+ public ReadOnlyDictionary<int, ClientUser> Users => users.AsReadOnly();
- static public Action<User>? UserConnected;
- static public Action<User>? UserDisconnected;
- static public Action<NetDataReader, User, PacketType>? PacketRecived;
+ static public Action<ClientUser>? UserConnected;
+ static public Action<ClientUser>? UserDisconnected;
+ static public Action<NetDataReader, ClientUser, PacketType>? PacketRecived;
static public Action? ServerDisconnected;
public Client(string ServerAddress, int port, string ServerPassword)
@@ -37,9 +37,10 @@ class Client
NetDataWriter writer = new();
writer.Put(new PacketInfo(PacketType.UserInfo, Id));
- writer.Put(UserName);
- writer.Put(OnekoLocal.Instance!.Name);
+ writer.Put(UserName.LimitLength(40));
+ writer.Put(OnekoLocal.Instance!.Name.LimitLength(40));
writer.PutBytesWithLength(OnekoLocal.Instance!.SpriteSheet.Serialize());
+ //TODO: NETWORK THE CURSOR HERE
peer.Send(writer, DeliveryMethod.ReliableUnordered);
};
@@ -50,7 +51,7 @@ class Client
};
Listener.NetworkReceiveEvent += (fromPeer, reader, channel, DeliveryMethod) => {
- if (reader.AvailableBytes < PacketInfo.SizeOf) return;
+ if (reader.AvailableBytes < PacketInfo.SizeOf || reader.AvailableBytes > 40000) return;
PacketInfo info = reader.GetPacketInfo();
if (info.Type == PacketType.UserId) {
@@ -58,7 +59,7 @@ class Client
return;
}
- User? from;
+ ClientUser? from;
if (!users.TryGetValue(info.FromId, out from)) {
from = new(info.FromId);
users.Add(from.Id, from);
@@ -73,15 +74,17 @@ class Client
}
else if (info.Type == PacketType.UserInfo) {
- from.Username = reader.GetString();
- from.Nekoname = reader.GetString();
+ from.Username = reader.GetString().LimitLength(40);
+ from.Nekoname = reader.GetString().LimitLength(40);
from.SpriteSheet = reader.GetBytesWithLength();
- Console.WriteLine($"User {from.Username} joined!");
+ Console.WriteLine($"User {from.Username} joined with {from.Nekoname}!");
from.Initialized = true;
UserConnected?.Invoke(from);
return;
}
+ if (reader.AvailableBytes > 500) return;
+
NetDataReader newReader = new(reader.GetRemainingBytes());
PacketRecived?.Invoke(newReader, from, info.Type);
};
@@ -96,4 +99,12 @@ class Client
{
NetClient.DisconnectAll();
}
+}
+
+class ClientUser(int id) : User(id)
+{
+ public byte[]? SpriteSheet;
+ public byte[]? CursorSprite;
+ public string? Username;
+ public string? Nekoname;
} \ No newline at end of file