예제 #1
0
    /// <summary>
    /// Method to parse and send an event when Pose Data is transfer from smart device
    /// </summary>
    /// <param name="recBuffer">The data that was recieved from the smart device</param>
    private void HandlePoseData(byte[] recBuffer)
    {
        Stream          stream    = new MemoryStream(recBuffer);
        BinaryFormatter formatter = new BinaryFormatter();

        if (SDK_BUILD_NO == 1)           //support in case we do not want acceleration data being streamed
        {
            PoseSerializer poseData = (PoseSerializer)formatter.Deserialize(stream);

            if (OnPoseData != null)
            {
                OnPoseData(poseData.V3, poseData.Q);
            }
        }
        else             //stream of acceleration data
        {
            PoseSerializerWithAcceleration poseData = (PoseSerializerWithAcceleration)formatter.Deserialize(stream);

            if (OnPoseData != null)
            {
                OnPoseData(poseData.Position, poseData.Rotation);
            }

            if (OnAccelerationData != null)
            {
                OnAccelerationData(poseData.Acceleration);
            }
        }
    }
예제 #2
0
    /// <summary>
    /// Method to parse and send an event when Pose Data is transfer from smart device
    /// </summary>
    /// <param name="recBuffer">The data that was recieved from the smart device</param>
    private void HandlePoseData(byte[] recBuffer)
    {
        Stream          stream    = new MemoryStream(recBuffer);
        BinaryFormatter formatter = new BinaryFormatter();
        PoseSerializer  poseData  = (PoseSerializer)formatter.Deserialize(stream);

        if (OnPoseData != null)
        {
            OnPoseData(poseData.V3, poseData.Q);
        }
    }
예제 #3
0
    // Token: 0x0600194E RID: 6478 RVA: 0x000F2FD8 File Offset: 0x000F11D8
    public static void SerializePose(CosmeticScript cosmeticScript, Transform root, string poseName)
    {
        StudentCosmeticSheet studentCosmeticSheet = cosmeticScript.CosmeticSheet();
        SerializedPose       serializedPose;

        serializedPose.CosmeticData = JsonUtility.ToJson(studentCosmeticSheet);
        serializedPose.BoneData     = PoseSerializer.getBoneData(root);
        string contents = JsonUtility.ToJson(serializedPose);
        string text     = string.Format("{0}/Poses/{1}", Application.streamingAssetsPath, poseName + ".txt");

        new FileInfo(text).Directory.Create();
        File.WriteAllText(text, contents);
    }
        private void HandleMessage(int bytesReceived)
        {
            MemoryStream          stream         = new MemoryStream(this.buf, 0, bytesReceived, false, true);
            ChannelSerializerInfo serializerType = ReadHeader(stream);
            object o = null;

            switch (serializerType)
            {
            case ChannelSerializerInfo.BinarySerializer:
                if (this.formatter == null)
                {
                    this.formatter = new BinaryFormatter();                                                 //lazy cum load.
                }
                o = this.formatter.Deserialize(stream);
                break;

            case ChannelSerializerInfo.TestSerializer:
                o = TestSerializer.Deserialize(stream);
                break;

            case ChannelSerializerInfo.SceneEstimatorSerializer:
                o = SceneEstimatorSerializer.Deserialize(stream, name);
                if (o == null)
                {
                    return;
                }
                break;

            case ChannelSerializerInfo.PoseAbsoluteSerializer:
            case ChannelSerializerInfo.PoseRelativeSerializer:
                o = PoseSerializer.Deserialize(stream, serializerType, name);
                if (o == null)
                {
                    return;
                }
                break;

            case ChannelSerializerInfo.SideObstacleSerializer:
                o = SideObstaclesSerializer.Deserialize(stream, name);
                if (o == null)
                {
                    return;
                }
                break;

            case ChannelSerializerInfo.SideRoadEdgeSerializer:
                o = SideRoadEdgeSerializer.Deserialize(stream, name);
                if (o == null)
                {
                    return;
                }
                break;

            case ChannelSerializerInfo.RoadBearing:
                o = RoadBearingSerializer.Deserialize(stream);
                if (o == null)
                {
                    return;
                }
                break;

            case ChannelSerializerInfo.ExplicitlyUnsupported:
                //drop this message
                return;

            default:
                throw new NotImplementedException("Attempt to use unsupported deserializer for Receive: " + serializerType.ToString());
            }

            lock (this.listeners)
            {
                foreach (KeyValuePair <uint, IChannelListener> kvp in this.listeners)
                {
                    IChannelListener listener = kvp.Value;
                    try
                    {
                        if (listener is IAdvancedChannelListener)
                        {
                            if (listener != null)
                            {
                                (listener as IAdvancedChannelListener).MessageArrived(this.name, o, this.seqNumberRX);
                            }
                        }
                        if (listener != null)
                        {
                            listener.MessageArrived(this.name, o);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Listener Exception: " + ex.Message);
                        Console.WriteLine("Stack Trace:");
                        Console.WriteLine(ex.StackTrace);
                    }
                }
            }
            packetRXCount++;
        }
예제 #5
0
    /// <summary>
    ///  Handles sending all data to the VR display, this includes pose data via the naviPoseconnection and touch data via the rpcConnection
    /// It also handles receiving any data from the VR display. Currently, it just listens for which connection should send which type of data
    /// </summary>
    void Update()
    {
        int recHostId;
        int connectionId;
        int channelId;
        byte[] recBuffer = new byte[1024];
        int bufferSize = 1024;
        int dataSize;
        byte error;
        NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);
        switch (recData)
        {
        case NetworkEventType.DataEvent:
            if (!naviPoseAssigned || !touchConnectionAssigned) {
                Stream stream = new MemoryStream(recBuffer);
                BinaryFormatter formatter = new BinaryFormatter();
                string message = formatter.Deserialize(stream) as string;
                AssignID(connectionId, message);
            }

            break;
        case NetworkEventType.DisconnectEvent:
            OnDisconnect(connectionId);
            break;
        default: //i.e. NetworkEventType.ConnectEvent, NetworkEventType.Nothing:\
            break;
        }

        if (naviPoseConnectionID > 0) {
            byte[] buffer = new byte[BUFFER_SIZE];
            Stream stream = new MemoryStream(buffer);
            BinaryFormatter formatter = new BinaryFormatter();
            PoseSerializer pose = new PoseSerializer();
            pose.Fill(TransformManagerInterface.Instance.transform.position, TransformManagerInterface.Instance.transform.rotation);
            formatter.Serialize(stream, pose);
            NetworkTransport.Send(socketID, naviPoseConnectionID, myUnreliableChannelId, buffer, BUFFER_SIZE, out error); //send full buffer
        }

        if (touchConnectionID > 0) {
            BinaryFormatter formatter = new BinaryFormatter();
            foreach (Touch t in Input.touches){
                byte[] buffer = new byte[BUFFER_SIZE];
                Stream stream = new MemoryStream(buffer);

                RPCSerializer rpc = new RPCSerializer();
                rpc.methodName = TOUCH_METHOD_ID;
                rpc.args = new object[1];
                TouchSerializer ts = new TouchSerializer();
                ts.Fill(t);
                rpc.args[0] = ts;
                formatter.Serialize(stream, rpc);
                NetworkTransport.Send(socketID, touchConnectionID, myReiliableChannelId, buffer, BUFFER_SIZE, out error);
            }
        }
    }
예제 #6
0
    /// <summary>
    ///  Handles sending all data to the VR display, this includes pose data via the naviPoseconnection and touch data via the rpcConnection
    /// It also handles receiving any data from the VR display. Currently, it just listens for which connection should send which type of data
    /// </summary>
    void Update()
    {
        int recHostId;
        int connectionId;
        int channelId;

        byte[]           recBuffer  = new byte[1024];
        int              bufferSize = 1024;
        int              dataSize;
        byte             error;
        NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);

        switch (recData)
        {
        case NetworkEventType.DataEvent:
            if (!naviPoseAssigned || !touchConnectionAssigned)
            {
                Stream          stream    = new MemoryStream(recBuffer);
                BinaryFormatter formatter = new BinaryFormatter();
                string          message   = formatter.Deserialize(stream) as string;
                AssignID(connectionId, message);
            }

            break;

        case NetworkEventType.DisconnectEvent:
            OnDisconnect(connectionId);
            break;

        default:         //i.e. NetworkEventType.ConnectEvent, NetworkEventType.Nothing:\
            break;
        }

        if (naviPoseConnectionID > 0)
        {
            byte[]          buffer    = new byte[BUFFER_SIZE];
            Stream          stream    = new MemoryStream(buffer);
            BinaryFormatter formatter = new BinaryFormatter();
            PoseSerializer  pose      = new PoseSerializer();
            pose.Fill(TransformManagerInterface.Instance.transform.position, TransformManagerInterface.Instance.transform.rotation);
            formatter.Serialize(stream, pose);
            NetworkTransport.Send(socketID, naviPoseConnectionID, myUnreliableChannelId, buffer, BUFFER_SIZE, out error);             //send full buffer
        }


        if (touchConnectionID > 0)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            foreach (Touch t in Input.touches)
            {
                byte[] buffer = new byte[BUFFER_SIZE];
                Stream stream = new MemoryStream(buffer);

                RPCSerializer rpc = new RPCSerializer();
                rpc.methodName = TOUCH_METHOD_ID;
                rpc.args       = new object[1];
                TouchSerializer ts = new TouchSerializer();
                ts.Fill(t);
                rpc.args[0] = ts;
                formatter.Serialize(stream, rpc);
                NetworkTransport.Send(socketID, touchConnectionID, myReiliableChannelId, buffer, BUFFER_SIZE, out error);
            }
        }
    }