コード例 #1
0
ファイル: OSCQuery.cs プロジェクト: benkuper/Unity-OSCQuery
    private void wsMessageReceived(WSQuery query, string message)
    {
        Debug.Log("Message received " + message);
        JSONObject o = new JSONObject(message);

        if (o.IsObject)
        {
            String command = o["COMMAND"].str;
            String data    = o["DATA"].str;
            Debug.Log("Received Command " + command + " > " + data);

            while (propQueryMapLock)
            {
                //wait
            }
            propQueryMapLock = true;

            if (command == "LISTEN")
            {
                propQueryMap[query].Add(data);
            }
            else if (command == "IGNORE")
            {
                propQueryMap[query].Remove(data);
            }

            propQueryMapLock = false;
        }
    }
コード例 #2
0
ファイル: OSCQuery.cs プロジェクト: benkuper/Unity-OSCQuery
    WSQuery createWSQuery()
    {
        WSQuery q = new WSQuery();

        q.messageReceived += wsMessageReceived;
        q.dataReceived    += wsDataReceived;
        q.socketOpened    += wsSocketOpened;
        q.socketClosed    += wsSocketClosed;
        q.socketError     += wsSocketError;
        return(q);
    }
コード例 #3
0
ファイル: OSCQuery.cs プロジェクト: benkuper/Unity-OSCQuery
    void sendFeedback(string address, WSQuery query)
    {
        CompInfo info = compInfoMap[address];

        object oldData = null;

        propQueryPreviousValues.TryGetValue(address, out oldData);

        object data = null;

        if (info.propInfo != null)
        {
            data = info.propInfo.GetValue(info.comp);
        }
        else if (info.fieldInfo != null)
        {
            data = info.fieldInfo.GetValue(info.comp);
        }
        else if (info.infoType == CompInfo.InfoType.VFX)
        {
            data = getVFXPropValue(info.comp as VisualEffect, info.genericInfo.type, info.genericInfo.name);
        }

        if (data == null)
        {
            return;
        }

        propQueryPreviousValues[address] = data;

        OSCMessage m = new OSCMessage(address);

        string dataType = data.GetType().Name;

        switch (dataType)
        {
        case "Boolean":
        {
            bool val = (bool)data;
            if (oldData != null && val == (bool)oldData)
            {
                return;
            }
            m.Append(val ? 1 : 0);
        }
        break;

        case "Vector2":
        {
            Vector2 v = (Vector2)data;
            if (oldData != null && v == (Vector2)oldData)
            {
                return;
            }
            m.Append(v.x);
            m.Append(v.y);
        }
        break;

        case "Vector3":
        {
            Vector3 v = (Vector3)data;
            if (oldData != null && v == (Vector3)oldData)
            {
                return;
            }
            m.Append(v.x);
            m.Append(v.y);
            m.Append(v.z);
        }
        break;

        case "Color":
        case "Vector4":
        {
            Color color    = dataType == "Color" ? (Color)data : (Color)(Vector4)data;
            Color oldColor = dataType == "Color" ? (Color)oldData : (Color)(Vector4)oldData;
            if (oldData != null && color == (Color)oldColor)
            {
                return;
            }
            m.Append(color.r);
            m.Append(color.g);
            m.Append(color.b);
            m.Append(color.a);
        }
        break;

        case "Quaternion":
        {
            Vector3 v = ((Quaternion)data).eulerAngles;
            if (oldData != null && v == ((Quaternion)oldData).eulerAngles)
            {
                return;
            }

            m.Append(v.x);
            m.Append(v.y);
            m.Append(v.z);
        }
        break;

        default:
            if (oldData != null && data.ToString() == oldData.ToString())
            {
                return;
            }
            if (info.type.IsEnum)
            {
                m.Append(data.ToString());
            }
            else
            {
                m.Append(data);
            }
            break;
        }

        query.sendData(m.BinaryData);
    }
コード例 #4
0
ファイル: OSCQuery.cs プロジェクト: benkuper/Unity-OSCQuery
 private void wsDataReceived(WSQuery query, byte[] data)
 {
     Debug.Log("Data received " + data.Length + " bytes");
 }
コード例 #5
0
ファイル: OSCQuery.cs プロジェクト: benkuper/Unity-OSCQuery
 private void wsSocketError(WSQuery query)
 {
     propQueryMap.Remove(query);
 }
コード例 #6
0
ファイル: OSCQuery.cs プロジェクト: benkuper/Unity-OSCQuery
 private void wsSocketClosed(WSQuery query)
 {
     propQueryMap.Remove(query);
 }
コード例 #7
0
ファイル: OSCQuery.cs プロジェクト: benkuper/Unity-OSCQuery
 private void wsSocketOpened(WSQuery query)
 {
     propQueryMap.Add(query, new List <string>());
 }