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
}
沒有留言:
張貼留言