在 Photon Bolt 中,如何将 token 中的 int 数据列表与事件一起发送?

问题描述 投票:0回答:1

我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Bolt;
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
,当服务器收到数据时,我也将它们打印出来。 A 数据的
byteArraySize
为 0,打印的时间是在
Write
方法中打印行之前,其中大小为 221。但是对于 B 数据,大小是正确的。什么可能导致这个问题?

c# unity-game-engine photon
1个回答
0
投票

最终解决方案:

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

这个奇怪的错误是由于分配了错误的变量而引起的。问题中已更正。

© www.soinside.com 2019 - 2024. All rights reserved.