在 Android 上检测到过时的 ITurnBasedMatch

Detecting out of date ITurnBasedMatch on Android

我正在使用 Google Play API.

编写回合制多人游戏 Android

考虑到该应用程序的未来版本,我意识到我可能需要更改 Byte Data Blob that gets passed around by the ITurnBasedMatch 对象的格式。

如果我更改 blob 格式,我将需要在运行时检测我收到的是哪个版本的 blob 数据,以便它可以正确反序列化而不会崩溃。或者至少,抛出一条错误消息并让用户知道匹配不再有效。

Google Play 库中是否内置了任何东西,我可以 set/get blob 数据的版本号, 反序列化它之前?

参考这里是Google-Play用来通知游戏比赛数据改变的回调函数的实现:

    public void OnTurnBasedMatchReceived(ITurnBasedMatch match)
    {
        // This happens when the other player makes a move in a match we are
        // involved in (although not nessessarily playing right now).
        OnUpdateMatchInfoRecieved(match);
    }

播放库中没有特定的版本号。通常,这是在应用程序的数据序列化中处理的。一个非常好的解决方案是 Flatbuffers:http://google.github.io/flatbuffers/

http://youtu.be/iQTxMkSJ1dQ 上有一个不错的视频摘要。

同时,是否可以检查缓冲区的前几个字节并确定版本?

例如,如果您的较新版本总是写出 V.x,其中 V. 是 ASCII 字符 V 和句点,x 是您序列化的版本号。这样你就可以安全地判断缓冲区是否不是以V开头的,那么它是一个旧版本,你应该使用旧的反序列化逻辑。

我开始使用 C# 中内置的 Serializable 属性。我选择了这条路线,因为它可以优雅地处理 versioning.

周围的问题

可在此处找到更多信息:

https://msdn.microsoft.com/en-us/library/7ay27kt9(v=vs.110).aspx