-
Notifications
You must be signed in to change notification settings - Fork 0
/
Message.cs
39 lines (33 loc) · 1.05 KB
/
Message.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// incoming packets are put into a Message which contains the EventType, player id (Guid), Opcode, and the Data
using System;
using System.Buffers;
using System.Buffers.Binary;
namespace Telex
{
public struct Message
{
public EventType Type { get; init; }
public uint Guid { get; init; }
public ushort Opcode { get; init; }
public ArraySegment<byte> Data { get; init; }
public Message(EventType type, uint guid, ArraySegment<byte> Data)
{
Type = type;
Guid = guid;
Opcode = BinaryPrimitives.ReadUInt16LittleEndian(Data.Slice(0, 2)); // extract opcode
this.Data = Data.Slice(2); // exclude opcode in Data
}
public void Recycle()
{
if (Data.Array.IsNullOrEmpty()) return;
ArrayPool<byte>.Shared.Return(Data.Array);
}
}
public enum EventType
{
Connect,
Disconnect,
Receive,
Timeout
}
}