Characters
This commit is contained in:
116
Game/Scripts/Networking/NetworkSerialization.cs
Normal file
116
Game/Scripts/Networking/NetworkSerialization.cs
Normal file
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
namespace MegaKoop.Game.Networking
|
||||
{
|
||||
public sealed class NetworkWriter : IDisposable
|
||||
{
|
||||
private readonly MemoryStream stream;
|
||||
private readonly BinaryWriter writer;
|
||||
|
||||
public NetworkWriter(int capacity = 128)
|
||||
{
|
||||
stream = new MemoryStream(capacity);
|
||||
writer = new BinaryWriter(stream);
|
||||
}
|
||||
|
||||
public void Write(byte value) => writer.Write(value);
|
||||
public void Write(int value) => writer.Write(value);
|
||||
public void Write(uint value) => writer.Write(value);
|
||||
public void Write(short value) => writer.Write(value);
|
||||
public void Write(ushort value) => writer.Write(value);
|
||||
public void Write(long value) => writer.Write(value);
|
||||
public void Write(ulong value) => writer.Write(value);
|
||||
public void Write(float value) => writer.Write(value);
|
||||
public void Write(bool value) => writer.Write(value);
|
||||
|
||||
public void Write(Vector3 value)
|
||||
{
|
||||
writer.Write(value.x);
|
||||
writer.Write(value.y);
|
||||
writer.Write(value.z);
|
||||
}
|
||||
|
||||
public void Write(Quaternion value)
|
||||
{
|
||||
writer.Write(value.x);
|
||||
writer.Write(value.y);
|
||||
writer.Write(value.z);
|
||||
writer.Write(value.w);
|
||||
}
|
||||
|
||||
public void Write(string value) => writer.Write(value ?? string.Empty);
|
||||
|
||||
public byte[] ToArray()
|
||||
{
|
||||
writer.Flush();
|
||||
return stream.ToArray();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
writer?.Dispose();
|
||||
stream?.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class NetworkReader : IDisposable
|
||||
{
|
||||
private readonly MemoryStream stream;
|
||||
private readonly BinaryReader reader;
|
||||
|
||||
public NetworkReader(byte[] buffer)
|
||||
{
|
||||
stream = new MemoryStream(buffer ?? Array.Empty<byte>());
|
||||
reader = new BinaryReader(stream);
|
||||
}
|
||||
|
||||
public byte ReadByte() => reader.ReadByte();
|
||||
public bool ReadBool() => reader.ReadBoolean();
|
||||
public int ReadInt() => reader.ReadInt32();
|
||||
public uint ReadUInt() => reader.ReadUInt32();
|
||||
public short ReadShort() => reader.ReadInt16();
|
||||
public ushort ReadUShort() => reader.ReadUInt16();
|
||||
public long ReadLong() => reader.ReadInt64();
|
||||
public ulong ReadULong() => reader.ReadUInt64();
|
||||
public float ReadFloat() => reader.ReadSingle();
|
||||
|
||||
public Vector3 ReadVector3()
|
||||
{
|
||||
float x = reader.ReadSingle();
|
||||
float y = reader.ReadSingle();
|
||||
float z = reader.ReadSingle();
|
||||
return new Vector3(x, y, z);
|
||||
}
|
||||
|
||||
public Quaternion ReadQuaternion()
|
||||
{
|
||||
float x = reader.ReadSingle();
|
||||
float y = reader.ReadSingle();
|
||||
float z = reader.ReadSingle();
|
||||
float w = reader.ReadSingle();
|
||||
return new Quaternion(x, y, z, w);
|
||||
}
|
||||
|
||||
public string ReadString() => reader.ReadString();
|
||||
|
||||
public bool TryReadBytes(int length, out byte[] bytes)
|
||||
{
|
||||
if (length <= 0 || reader.BaseStream.Position + length > reader.BaseStream.Length)
|
||||
{
|
||||
bytes = Array.Empty<byte>();
|
||||
return false;
|
||||
}
|
||||
|
||||
bytes = reader.ReadBytes(length);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
reader?.Dispose();
|
||||
stream?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user