Hello all,
I am using MessagePack to serialize my message and sending it over to my sever but am having trouble figuring out how to get the data out properly.
I am sending it in this manner currently to test :
var msg = NOC.Serialize(opCode, opReqCode, parameters);
con.SendByChannel(MsgType.InternalHighest+1, new ByteArray() { Data = msg }, channel);
Where ByteArray simply is a class derived from MessageBase including “public byte[ ] Data { get; set; }”
On the receiving end I am attempting to use this :
private void RegisterHandlers()
{
NetworkServer.RegisterHandler(MsgType.InternalHighest+1, IncomingOperationHandler);
}
private void IncomingOperationHandler(NetworkMessage msg)
{
msg.reader.SeekZero();
var deserial = NOC.Deserialize(msg.reader.ReadBytesAndSize());
Debug.Log(deserial);
}
I was trying to use the reader.SeekZero(); because I was getting an error of “IndexOutOfRangeException: NetworkReader:ReadByte out of range:NetBuf sz:0 pos:0” and a thread I saw suggested it so I gave it a try but it didnt help.
The Deserialize method includes :
public static object[] Deserialize(byte[] deserial)
{
var deserializedmsg = LZ4MessagePackSerializer.Deserialize<object[]>(deserial);
Debug.Log("Msg Deserialized");
return deserializedmsg;
}
I am pretty sure I am just missing something in the IncomingOperationHandler, I am not quite sure how I should be actually handling the message, any ideas?
Thanks!
Edit : Looks like using this got me closer.
var msg1 = msg.ReadMessage<ByteArray>().Data;
var deserial = NOC.Deserialize(msg1);
But now I am getting this.
[Exception] NullReferenceException: Object reference not set to an instance of an object
LZ4MessagePackSerializer.Deserialize[T]() Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.cs:141
139: public static T Deserialize<T>(byte[] bytes, IFormatterResolver resolver)
140: {
-->141: return DeserializeCore<T>(new ArraySegment<byte>(bytes, 0, bytes.Length), resolver);
142: }
LZ4MessagePackSerializer.Deserialize[T]() Assets/Scripts/MessagePack/LZ4/LZ4MessagePackSerializer.cs:136
134: public static T Deserialize<T>(byte[] bytes)
135: {
-->136: return Deserialize<T>(bytes, null);
137: }
NOC.Deserialize() Assets/_Components/_Server/_Server/NOC.cs:90
88: public static object[] Deserialize(byte[] deserial)
89: {
-->90: var deserializedmsg = LZ4MessagePackSerializer.Deserialize<object[]>(deserial);
91: Debug.Log("Msg Deserialized");
92: return deserializedmsg;
WorldEngine.IncomingOperationHandler() Assets/_Components/_Server/_Server/WorldEngine.cs:107
105: {
106: var msg1 = msg.ReadMessage<ByteArray>();
-->107: var deserial = NOC.Deserialize(msg1.Data);
108: Debug.Log(deserial);
109: }