How to create a generic Java .net (C#) protocol?

Post here all your questions related with SmartFoxServer .Net/Unity3D API

Moderators: Lapo, Bax

Post Reply
heinrich_soebke
Posts: 2
Joined: 09 Mar 2011, 09:11

How to create a generic Java .net (C#) protocol?

Post by heinrich_soebke »

What is a working (and recommended) way to create a protocol (the communication) between a Java SFS extension and a Unity3D client?
There should be transferred Java objects without adding any code to serialize and deserialize these objects (so that new java objects can be added without changing the protocol)

One approach so far: usage of IKVM on Unity3D, so the Java classes can be used in Unity3D also. But what is a solution for the serialize/deserialize part? xStream? (although XML is costly in terms of bandwitdth?)

Any thoughts?
heinrich_soebke
Posts: 2
Joined: 09 Mar 2011, 09:11

Post by heinrich_soebke »

Got an answer:
Use SFS2X.
There exists on both sides (Java and C#) a Serializer/Deserializer for a raw protocol.

Code: Select all

	[Test]
 		public void TestObjectNestedClass() {
 			DefaultSFSDataSerializer serializer = DefaultSFSDataSerializer.Instance;
 			DefaultSFSDataSerializer.RunningAssembly = Assembly.GetExecutingAssembly();
 			
			ISFSObject sfsObj = new SFSObject();
 			
			TestObject obj1 = new TestObject();
			obj1.intField = 60;
			TestObject obj2 = new TestObject();
			obj2.intField = 70;
 			
			sfsObj.PutClass("obj1", obj1);
 			sfsObj.PutClass("obj2", obj2);
 																	
 			ByteArray data = serializer.Object2Binary(sfsObj);
 			Assert.Greater(data.Length, 0);
 			
 			ISFSObject res = serializer.Binary2Object(data);
 			Assert.AreEqual(2, res.Size());
 			
 			TestObject res1 = res.GetClass("obj1") as TestObject;
 			TestObject res2 = res.GetClass("obj2") as TestObject;
 			
 			Assert.AreEqual(60, res1.intField);
 			Assert.AreEqual(70, res2.intField);
 		}
Post Reply