public void writePrimitive(DatagramOut dg, string type_n, object value)
    {
        switch (type_n)
        {
        case "uint8":
            dg.Write((Byte)value);
            break;

        case "uint16":
            dg.Write((UInt16)value);
            break;

        case "uint32":
            dg.Write((UInt32)value);
            break;

        case "uint64":
            dg.Write((UInt64)value);
            break;

        case "int8":
            dg.Write((SByte)value);
            break;

        case "int16":
            dg.Write(Convert.ToInt16(value));              // bad bad bad shadow TODO: properly implement floating types and nuke OTP's math
            break;

        case "int32":
            dg.Write((Int32)value);
            break;

        case "int64":
            dg.Write((Int64)value);
            break;

        case "string":
            dg.Write((String)value);
            break;

        case "blob":
            dg.Write((byte[])value);
            break;

        case "float64":
            dg.Write((double)value);
            break;

        default:
            Debug.Log("Writing Error: Type '" + type_n + "' is not a primitive");
            break;
        }
    }
    public bool connect(string host, int port)
    {
        socket = new TcpClient();

        try {
            socket.Connect(host, port);
        } catch (SocketException e) {
            Debug.LogException(e);
            return(false);
        }

        connected = true;

        stream = socket.GetStream();
        writer = new BinaryWriter(stream);

        sout   = new AstronStream();
        odgram = new DatagramOut(sout);

        beginReceiveData();

        return(connected);
    }
    public void serializeType(DatagramOut dg, string type_n, object value)
    {
        if (type_n.Contains("int"))
        {
            int divideBy = 1;

            if (type_n.Contains("/"))
            {
                string[] divideParts = type_n.Split("/".ToCharArray());

                divideBy = Int32.Parse(divideParts[1]);

                type_n = divideParts[0];
            }

            if (divideBy != 1)
            {
                writePrimitive(dg, type_n, (Int64)Convert.ToInt64(((double)value) * divideBy));
                return;
            }
        }

        writePrimitive(dg, type_n, value);
    }