void printBytes(byte[] bytes)
    {
        String s = "";

        foreach (byte b in bytes)
        {
            s += b + " ";
        }
        NetworkingUtility.log(s);
    }
 public static void writeObjToStream(BinaryWriter writer, object o)
 {
     if (o is object[]) // primitive array
     {
         foreach (object p in (object[])o)
         {
             writeObjToStream(writer, p); // Array, we're going deeper!
         }
     }
     else if (o is Object[]) // Object array
     {
         foreach (Object p in (Object[])o)
         {
             writeObjToStream(writer, p); // Array, we're going deeper!
         }
     }
     else if (o is Byte[]) // Byte array
     {
         foreach (Byte p in (Byte[])o)
         {
             writeObjToStream(writer, p); // Array, we're going deeper!
         }
     }
     else if (o is int)
     {
         writer.Write((int)o);
     }
     else if (o is long)
     {
         writer.Write((long)o);
     }
     else if (o is float)
     {
         writer.Write((float)o);
     }
     else if (o is byte)
     {
         writer.Write((byte)o);
     }
     else if (o is short)
     {
         writer.Write((short)o);
     }
     else if (o is string)
     {
         WriteString(writer, (string)o);
     }
     else if (o is double)
     {
         writer.Write((double)o);
     }
     else if (o is UnityEngine.Vector3)
     {
         writer.Write(((UnityEngine.Vector3)o).x);
         writer.Write(((UnityEngine.Vector3)o).y);
         writer.Write(((UnityEngine.Vector3)o).z);
     }
     else if (o is bool)
     {
         writer.Write((bool)o);
     }
     else
     {
         NetworkingUtility.log("UNKNOWN DATA TYPE " + o.GetType());
     }
 }