В Photon Bolt, как отправить список данных int в токене вместе с событием?

#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);
        }
    }
}
 

Странная ошибка вызвана присвоением неправильной переменной. Это было исправлено в вопросе.