1 server/client雙邊都要有這個class,且package相同。
2 java class要實作com.smartfoxserver.v2.protocol.serialization.SerializableSFSType。
3 java class單獨編譯成jar,放到extensions\__lib__\。
4 unity c# class要實作Sfs2X.Protocol.Serialization。
5 unity c#要using Sfs2X.Protocol.Serialization
及System.Reflection
且呼叫 DefaultSFSDataSerializer.RunningAssembly = Assembly.GetExecutingAssembly();
現在來看看它的用法。
Server Side
首先我們定義一個要序列化的類別,這個類別要實作SerializableSFSType。
Class編譯成jar,放到extensions\__lib__\。
package com.sample.model; import com.smartfoxserver.v2.protocol.serialization.SerializableSFSType; public class SampleClass implements SerializableSFSType { public String id="id_from_server"; public int hitPoints=10; public int count = 10; public SampleClass() { } }
把這個類別傳給client端的時候,使用class類型。
SampleClass sc=new SampleClass(); ISFSObject resObj=SFSObject.newInstance(); resObj.putClass("sc", sc); send("cmd",resObj, user);
Client Side
Client也需要一個相同的class,client的class package需和java class相同。
client class要實作Serialization。
using Sfs2X.Protocol.Serialization; using com.smartfoxserver.v2.protocol.serialization.SerializableSFSType; namespace example{ public class SampleClass : SerializableSFSType { public string id="cid"; public int hitPoints=0; public int count = 0; } }
Client接收server傳來的class時需要呼叫DefaultSFSDataSerializer,
DefaultSFSDataSerializer.RunningAssembly = Assembly.GetExecutingAssembly();
這行通常可放在new SmartfoxServer之後,
要確保SFSDataSerializer可見到需要處理的class。
using Sfs2X.Protocol.Serialization; using System.Reflection; DefaultSFSDataSerializer.RunningAssembly = Assembly.GetExecutingAssembly(); //other code.... private void OnExtensionResponse (BaseEvent evt) { ISFSObject obj = (SFSObject)evt.Params ["params"]; SampleClass sc=(SampleClass)obj.GetClass("sc"); String id=sc.id; //get field }
沒有留言:
張貼留言