photon - 在 Photon Bolt 中,如何将令牌中的 int 数据列表与事件一起发送?
问题描述
我的代码:
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 的数据,大小是正确的。什么可能导致这个问题?
解决方案
最终解决方案:
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);
}
}
}
奇怪的错误是由分配给错误的变量引起的。它已在问题中得到纠正。
推荐阅读
- cucumber - 如何在步骤定义的“when”或“then”中打印“given”语句?
- racket - 在球拍中生成流
- c - C中的链表给出分段错误
- android - 错误:EISDIR:对目录的非法操作,读取 React Native (Android )
- python - Nsolve 不会解决
- ruby-on-rails - 将数组元素减少为嵌套类实例化
- asp.net-core - 如何在 Blazor 服务器端正确重定向到页面?
- python - 读取多个 csv 文件并将它们转换为系列对象的优雅方式
- swift - 更改视图下线条的颜色
- c# - 如何将数据从 .txt 文件导入 datagridview