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; } }
WSQuery createWSQuery() { WSQuery q = new WSQuery(); q.messageReceived += wsMessageReceived; q.dataReceived += wsDataReceived; q.socketOpened += wsSocketOpened; q.socketClosed += wsSocketClosed; q.socketError += wsSocketError; return(q); }
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); }
private void wsDataReceived(WSQuery query, byte[] data) { Debug.Log("Data received " + data.Length + " bytes"); }
private void wsSocketError(WSQuery query) { propQueryMap.Remove(query); }
private void wsSocketClosed(WSQuery query) { propQueryMap.Remove(query); }
private void wsSocketOpened(WSQuery query) { propQueryMap.Add(query, new List <string>()); }