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

Posted

技术标签:

【中文标题】在 Photon Bolt 中,如何将 int 数据列表与事件一起发送到令牌中?【英文标题】:In Photon Bolt, how to send List of int data in a token along with event? 【发布时间】:2020-11-28 13:59:48 【问题描述】:

我的代码:

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 的数据,大小是正确的。什么可能导致这个问题?

【问题讨论】:

【参考方案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);
        
    

这个奇怪的错误是由分配给错误的变量引起的。它已在问题中得到纠正。

【讨论】:

以上是关于在 Photon Bolt 中,如何将 int 数据列表与事件一起发送到令牌中?的主要内容,如果未能解决你的问题,请参考以下文章

Photon RPC 发送错误的 int 值

如何将一个桌面作为 Photon Unity 服务器

如何将 PayUMoney BOLT 与 MVC4 c# 集成?

如何生成一个随机数并确保在 Unity 中使用 Photon 的每个人都相同?

Storm 集群

Apache - Storm