void ReadMessages() { string rawMsg = middleware.ReadMessage(); if (rawMsg.Length == 0) { return; } FeedbackMiddlewareMessage msg = JsonUtility.FromJson <FeedbackMiddlewareMessage>(rawMsg); feedback.HandleFeedback(System.Uri.UnescapeDataString(msg.feedback.content).Replace('+', ' ')); }
// Maybe parsing/etc. could be done in the communication thread better? void ReadMessages() { string rawMsg = middleware.ReadMessage(); // Raw JSON string from middleware if (rawMsg.Length == 0) { return; // will return "" if there is nothing new } //Debug.Log("Raw: "+rawMsg); // Try to parse properties "msgType" & "agentId" if in message AsapMessage asapMessage = JsonUtility.FromJson <AsapMessage>(rawMsg); switch (asapMessage.msgType) { case AUPROT.MSGTYPE_AGENTSPECREQUEST: // AgentSpecRequest type msg comming from ASAP AgentSpecRequest agentSpecRequest = JsonUtility.FromJson <AgentSpecRequest>(rawMsg); if (!agentRequests.ContainsKey(agentSpecRequest.agentId)) { agentRequests.Add(agentSpecRequest.agentId, agentSpecRequest); Debug.Log("Added agent request: " + agentSpecRequest.source + ":" + agentSpecRequest.agentId); nextWorldUpdate = Time.time + 3.0f; // Delay world updates while setting up new agent... } else { Debug.LogWarning("Already preparing agentSpec for ID " + agentSpecRequest.agentId); } break; case AUPROT.MSGTYPE_AGENTSTATE: if (!agents.ContainsKey(asapMessage.agentId) || agents[asapMessage.agentId].manualAnimation) { break; } if (agents.ContainsKey(asapMessage.agentId)) { if (agents[asapMessage.agentId].agentState == null) { agents[asapMessage.agentId].agentState = new AgentState(); } JsonUtility.FromJsonOverwrite(rawMsg, agents[asapMessage.agentId].agentState); if (agents[asapMessage.agentId].agentState.binaryBoneValues.Length > 0) { Debug.LogWarning("Parsing binaryBoneValues untested"); byte[] binaryMessage = System.Convert.FromBase64String( agents[asapMessage.agentId].agentState.binaryBoneValues); agents[asapMessage.agentId].agentState.boneValues = new BoneTransform[agents[asapMessage.agentId].agentState.nBones]; using (BinaryReader br = new BinaryReader(new MemoryStream(binaryMessage))) { for (int b = 0; b < agents[asapMessage.agentId].agentState.nBones; b++) { agents[asapMessage.agentId].agentState.boneValues[b] = new BoneTransform(br); } } } if (agents[asapMessage.agentId].agentState.binaryFaceTargetValues.Length > 0) { Debug.LogWarning("Parsing binaryFaceTargetValues untested"); byte[] binaryMessage = System.Convert.FromBase64String( agents[asapMessage.agentId].agentState.binaryFaceTargetValues); agents[asapMessage.agentId].agentState.faceTargetValues = new float[agents[asapMessage.agentId].agentState.nFaceTargets]; using (BinaryReader br = new BinaryReader(new MemoryStream(binaryMessage))) { for (int f = 0; f < agents[asapMessage.agentId].agentState.nFaceTargets; f++) { agents[asapMessage.agentId].agentState.faceTargetValues[f] = br.ReadSingle(); } } } } else { Debug.LogWarning("Can't update state for unknown agent: " + asapMessage.agentId); } break; default: break; } }