#photon
#photon
Вопрос:
Мои коды:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Bo<
using UdpKit;
//using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
public class ListOfIntToken : IProtocolToken
{
public List<int> intList;
public int byteArraySize;
public void Read(UdpPacket packet)
{
byteArraySize = packet.ReadInt();
var objectBytes = packet.ReadByteArray(byteArraySize);
var mStream = new MemoryStream();
var binFormatter = new BinaryFormatter();
mStream.Write(objectBytes, 0, objectBytes.Length);
mStream.Position = 0;
intList = binFormatter.Deserialize(mStream) as List<int>;
}
public void Write(UdpPacket packet)
{
var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, intList);
//byte[] bytes = userId.Select(x => (byte)x).ToArray();
var byteArray = mStream.ToArray();
byteArraySize = byteArray.Length;
packet.WriteInt(byteArraySize);
packet.WriteByteArray(byteArray);
}
}
У меня есть два клиента, на которых запущены A и B. A — сервер. Оба отправляют событие с этим токеном, но с разными данными для тестирования. В Write
методе я распечатываю byteArraySize
out, и когда данные поступают на сервер, я их тоже распечатываю. Данные byteArraySize
for A равны 0, а время их печати указано до строки печати в Write
методе, где размер был 221. Однако для данных B размер был правильным. Что может вызвать эту проблему?
Ответ №1:
Окончательное решение:
public void Read(UdpPacket packet)
{
intList.Clear();
if (packet.ReadBool()) // check if we have data to read
{
var total = packet.ReadInt();
for (int i = 0; i < total; i )
{
intList.Add(packet.ReadInt());
}
}
}
public void Write(UdpPacket packet)
{
var total = intList.Count;
if (packet.WriteBool(total > 0)) // Write bool to signal we have some data
{
packet.WriteInt(total);
foreach (var item in intList)
{
packet.WriteInt(item);
}
}
}
Странная ошибка вызвана присвоением неправильной переменной. Это было исправлено в вопросе.