2019-12-20 15:03:33 +01:00
|
|
|
using System;
|
2019-12-20 23:32:40 +01:00
|
|
|
using System.Collections.Generic;
|
2019-12-20 15:03:33 +01:00
|
|
|
using System.IO;
|
|
|
|
using System.IO.Compression;
|
|
|
|
using Lidgren.Network;
|
|
|
|
using Microsoft.Xna.Framework;
|
|
|
|
using MLEM.Misc;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
using Newtonsoft.Json.Bson;
|
|
|
|
|
|
|
|
namespace MLEM.Data {
|
|
|
|
public static class NetExtensions {
|
|
|
|
|
|
|
|
public static void Write(this NetBuffer buffer, Vector2 vector) {
|
|
|
|
buffer.Write(vector.X);
|
|
|
|
buffer.Write(vector.Y);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Vector2 ReadVector2(this NetBuffer buffer) {
|
|
|
|
return new Vector2(buffer.ReadFloat(), buffer.ReadFloat());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void Write(this NetBuffer buffer, Guid guid) {
|
|
|
|
buffer.Write(guid.ToByteArray());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Guid ReadGuid(this NetBuffer buffer) {
|
|
|
|
return new Guid(buffer.ReadBytes(16));
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void Write(this NetBuffer buffer, Direction2 direction) {
|
|
|
|
buffer.Write((short) direction);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Direction2 ReadDirection(this NetBuffer buffer) {
|
|
|
|
return (Direction2) buffer.ReadInt16();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void WriteObject<T>(this NetBuffer buffer, T obj, JsonSerializer serializer) {
|
2019-12-20 23:35:38 +01:00
|
|
|
if (EqualityComparer<T>.Default.Equals(obj, default)) {
|
2019-12-20 23:32:40 +01:00
|
|
|
buffer.Write(0);
|
2019-12-20 23:35:38 +01:00
|
|
|
return;
|
|
|
|
}
|
2019-12-20 15:03:33 +01:00
|
|
|
using (var memory = new MemoryStream()) {
|
2020-01-27 22:31:09 +01:00
|
|
|
using (var stream = new DeflateStream(memory, CompressionLevel.Fastest, true))
|
|
|
|
serializer.Serialize(new BsonDataWriter(stream), obj, typeof(T));
|
2019-12-20 15:07:25 +01:00
|
|
|
var arr = memory.ToArray();
|
|
|
|
buffer.Write(arr.Length);
|
|
|
|
buffer.Write(arr);
|
2019-12-20 15:03:33 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static T ReadObject<T>(this NetBuffer buffer, JsonSerializer serializer) {
|
2019-12-20 15:07:25 +01:00
|
|
|
var length = buffer.ReadInt32();
|
2019-12-20 23:32:40 +01:00
|
|
|
if (length <= 0)
|
|
|
|
return default;
|
2019-12-20 15:07:25 +01:00
|
|
|
var arr = buffer.ReadBytes(length);
|
|
|
|
using (var memory = new MemoryStream(arr)) {
|
2020-01-27 22:31:09 +01:00
|
|
|
using (var stream = new DeflateStream(memory, CompressionMode.Decompress, true))
|
|
|
|
return serializer.Deserialize<T>(new BsonDataReader(stream));
|
2019-12-20 15:03:33 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|