在 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 数据列表与事件一起发送到令牌中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 PayUMoney BOLT 与 MVC4 c# 集成?