diff options
Diffstat (limited to 'NetServer.cs')
| -rw-r--r-- | NetServer.cs | 65 |
1 files changed, 31 insertions, 34 deletions
diff --git a/NetServer.cs b/NetServer.cs index c2c626a..5ff35f1 100644 --- a/NetServer.cs +++ b/NetServer.cs @@ -45,44 +45,41 @@ class Server ServerUser user = users[fromPeer.Id]; //Size limits for packet types - if (info.Type == PacketType.OnekoSpritesheet && dataReader.AvailableBytes > 30000) return; - else if (info.Type != PacketType.OnekoSpritesheet && dataReader.AvailableBytes > 500) return; - - if (info.Type == PacketType.OnekoSpritesheet) user.SpriteSheet = dataReader.GetRemainingBytes(); - else if (info.Type == PacketType.Username) user.Username = dataReader.GetString(64); + if (info.Type == PacketType.UserInfo && dataReader.AvailableBytes > 40000) return; + else if (info.Type != PacketType.UserInfo && dataReader.AvailableBytes > 500) return; NetDataWriter writer = new(); - if (user.ExchangedData && !user.Initialized) { - //Send ID - writer.ResetWithInfo(new PacketInfo(PacketType.UserId, -1)); - writer.Put(user.Id); - fromPeer.Send(writer, DeliveryMethod.ReliableUnordered); - user.Initialized = true; - - Console.WriteLine($"{fromPeer.EndPoint} is {user.Username}!"); + if (info.Type == PacketType.UserInfo) { + user.Username = dataReader.GetString(); + if (user.Username.Length > 40) user.Username = user.Username[0..40]; //Clamp username length + user.SpriteSheet = dataReader.GetBytesWithLength(); - foreach (ServerUser toSend in users.Values) - { - if (!toSend.ExchangedData || toSend == user) continue; - - //Send all current users spritesheets to this user. - writer.ResetWithInfo(new PacketInfo(PacketType.OnekoSpritesheet, toSend.Id), toSend.SpriteSheet!.Length); - writer.Put(toSend.SpriteSheet); + if (!user.Initialized) { + //Send ID + writer.ResetWithInfo(new PacketInfo(PacketType.UserId, -1)); + writer.Put(user.Id); fromPeer.Send(writer, DeliveryMethod.ReliableUnordered); - - writer.ResetWithInfo(new PacketInfo(PacketType.Username, toSend.Id)); - writer.Put(toSend.Username); - fromPeer.Send(writer, DeliveryMethod.ReliableUnordered); - - //Send all current users this users spritesheet - writer.ResetWithInfo(new PacketInfo(PacketType.OnekoSpritesheet, user.Id), user.SpriteSheet!.Length); - writer.Put(user.SpriteSheet); - toSend.Peer.Send(writer, DeliveryMethod.ReliableUnordered); - - writer.ResetWithInfo(new PacketInfo(PacketType.Username, user.Id)); - writer.Put(user.Username); - toSend.Peer.Send(writer, DeliveryMethod.ReliableUnordered); + user.Initialized = true; + + Console.WriteLine($"{fromPeer.EndPoint} is {user.Username}!"); + + foreach (ServerUser toSend in users.Values) + { + if (!toSend.Initialized || toSend == user) continue; + + //Send all current users spritesheets to this user. + writer.ResetWithInfo(new PacketInfo(PacketType.UserInfo, toSend.Id)); + writer.Put(toSend.Username); + writer.PutBytesWithLength(toSend.SpriteSheet); + fromPeer.Send(writer, DeliveryMethod.ReliableUnordered); + + //Send all current users this users spritesheet + writer.ResetWithInfo(new PacketInfo(PacketType.UserInfo, user.Id)); + writer.Put(user.Username); + writer.PutBytesWithLength(user.SpriteSheet); + toSend.Peer.Send(writer, DeliveryMethod.ReliableUnordered); + } } } @@ -90,7 +87,7 @@ class Server writer.ResetWithInfo(new PacketInfo(info.Type, fromPeer.Id)); writer.Put(dataReader.GetRemainingBytes()); foreach (ServerUser toSend in users.Values) { - if (!toSend.ExchangedData || toSend == user) continue; + if (!toSend.Initialized || toSend == user) continue; toSend.Peer.Send(writer, DeliveryMethod); } } |
