Page 1 of 1

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

Posted: 18 Mar 2011, 12:58
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?

Posted: 22 Mar 2011, 15:24
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);
       }