Exemplo n.º 1
0
    protected void UpdateCamera()
    {
        // Compose and send a camera update message.
        Camera        camera   = Camera.main;
        Transform     camXForm = camera.transform;
        CameraMessage msg      = new CameraMessage();

        msg.CameraID  = 1; // Main.
        msg.X         = camXForm.position.x;
        msg.Y         = camXForm.position.y;
        msg.Z         = camXForm.position.z;
        msg.DirX      = camXForm.forward.x;
        msg.DirY      = camXForm.forward.y;
        msg.DirZ      = camXForm.forward.z;
        msg.UpX       = camXForm.up.x;
        msg.UpY       = camXForm.up.y;
        msg.UpZ       = camXForm.up.z;
        msg.Far       = camera.farClipPlane;
        msg.Near      = camera.nearClipPlane;
        msg.FOV       = camera.fieldOfView;
        msg.Reserved1 = 0;
        msg.Reserved2 = 0;

        // Write to packet and set.
        _packet.Reset((ushort)RoutingID.Camera, 0);
        msg.Write(_packet);
        if (_packet.FinalisePacket())
        {
            _server.Send(_packet);
        }
    }
Exemplo n.º 2
0
    private void MessageReceived(IRemoteConnection sender, string message)
    {
        messageCount++;


        if (message.StartsWith(MessagePrefix.MAP))
        {
            MapMessage mapMessage = new MapMessage();
            mapMessage.DeserializeArguments(message.Remove(0, MessagePrefix.MAP.Length));
            MapMessages.Enqueue(mapMessage);
        }
        else if (message.StartsWith(MessagePrefix.BANK))
        {
            BankMessage bankMessage = new BankMessage();
            bankMessage.DeserializeArguments(message.Remove(0, MessagePrefix.BANK.Length));
            BankMessages.Enqueue(bankMessage);
        }
        else if (message.StartsWith(MessagePrefix.CAMERA))
        {
            Debug.Log("received " + message);
            CameraMessage camMessage = new CameraMessage();
            camMessage.DeserializeArguments(message.Remove(0, MessagePrefix.CAMERA.Length));
            CameraMessages.Enqueue(camMessage);
        }
    }
Exemplo n.º 3
0
        /// <summary>
        /// Request permission to set value of params. Returns true if permission granted
        /// </summary>
        private async Task <bool> RequestPermission()
        {
            // Create the message
            UserRequestEditParamMessage UserMsg = new UserRequestEditParamMessage(_token);

            // Get the codec
            UserRequestEditParamMessageCodec UserMsgCodec = new UserRequestEditParamMessageCodec();

            // Send the message
            if (await Send(await UserMsgCodec.Encode(UserMsg)))
            {
                // If sent get the response
                string MsgReceived = await _CameraSocket.Receive();

                // Get the codec
                CameraMessageCodec CamMsgCodec = new CameraMessageCodec();

                // Decode the string
                CameraMessage CamMsg = await CamMsgCodec.Decode(MsgReceived);

                if (CamMsg.rval != 0 || CamMsg.msg_id != UserMsg.msg_id)
                {
                    return(false);
                }
                return(true);
            }
            // Couldn't send
            return(false);
        }
Exemplo n.º 4
0
    private void Awake()
    {
        _HexClickedMessage      = new HexClickedMessage(null);
        _unitUseCompoundMessage = new UnitUseCompoundMessage();
        _cameraMessage          = new CameraMessage();

        _debug         = GameModel.Get <GameDebug>();
        _elements      = GameConfig.Get <ElementConfig>().ElementsDictionary;
        _solidMaterial = Solid.GetComponent <MeshRenderer>().material;
        GameMessage.Listen <CameraControlMessage>(_ => _clickEnabled = _.Enable);
    }
Exemplo n.º 5
0
        private async void TakePicture(CameraMessage cameraMessage)
        {
            if (isCameraInitializing)
            {
                await SendResult(new ResultMessage(cameraMessage) { ResultId = -3, Result = "Initializing" });

                return;
            }

            await dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
            {
                lock (keysInProcess)
                {
                    keysInProcess["CAMERA"] = true;
                }

                if (!isCameraInitialized)
                {
                    isCameraInitializing = true;
                    await InitializeCamera();
                    isCameraInitializing = false;
                }

                var imageName = "photo_" + DateTime.Now.Ticks + ".jpg";
                foreach (
                    var destination in destinations.Where(destination => destination.CheckPrefix(cameraMessage.Url)))
                {
                    imageName = destination.ParseAddressForFileName(cameraMessage.Url);
                    break;
                }

                var stream = await camera.Capture(imageName);

                //stores the image in Azure BLOB Storage
                var memStream  = new MemoryStream();
                var fileStream = await stream.OpenStreamForReadAsync();
                await fileStream.CopyToAsync(memStream);

                if (!await SendToDestinations(cameraMessage, memStream, KnownFolders.PicturesLibrary))
                {
                    await SendResult(new ResultMessage(cameraMessage)
                    {
                        Result = imageName
                    });
                }

                lock (keysInProcess)
                {
                    keysInProcess["CAMERA"] = false;
                }
            });
        }
Exemplo n.º 6
0
        public override void Update(TimeSpan elapsed)
        {
            if (GameModel.Instance.BodyPlayer != null || GameModel.Instance.SoulPlayer != null)
            {
                if (!GameModel.Instance.BodyCamInit && GameModel.Instance.BodyPlayer != null)
                {
                    var camMessage = new CameraMessage(GameModel.Instance.BodyMap.Start.X, GameModel.Instance.BodyMap.Start.Y);
                    GlobalServer.Instance.SendMessage(GameModel.Instance.BodyPlayer.Id, camMessage.ToString());
                    GameModel.Instance.BodyCamInit = true;
                }

                if (!GameModel.Instance.SoulCamInit && GameModel.Instance.SoulPlayer != null)
                {
                    var camMessage = new CameraMessage(GameModel.Instance.SoulMap.Start.X, GameModel.Instance.SoulMap.Start.Y);
                    GlobalServer.Instance.SendMessage(GameModel.Instance.SoulPlayer.Id, camMessage.ToString());
                    GameModel.Instance.SoulCamInit = true;
                }

                ResetTiles(PlayerType.BODY);
                ResetTiles(PlayerType.SOUL);

                UpdateTiles(PlayerType.BODY);
                UpdateTiles(PlayerType.SOUL);

                ResolveDestructions(PlayerType.BODY);
                ResolveDestructions(PlayerType.SOUL);

                if (GameModel.Instance.BodyPlayer != null)
                {
                    MapMessage bodyMessage = new MapMessage(GameModel.Instance.BodyMap.GetTiles());
                    GlobalServer.Instance.SendMessage(GameModel.Instance.BodyPlayer.Id, bodyMessage.ToString());
                }

                if (GameModel.Instance.SoulPlayer != null)
                {
                    MapMessage soulMessage = new MapMessage(GameModel.Instance.SoulMap.GetTiles());
                    GlobalServer.Instance.SendMessage(GameModel.Instance.SoulPlayer.Id, soulMessage.ToString());
                }
            }

            BankMessage bankMessage = new BankMessage(GameModel.Instance.Bank.Cells, GameModel.Instance.Bank.Nutrients, GameModel.Instance.Bank.Thoughts, GameModel.Instance.Bank.Ideas);

            if (GameModel.Instance.BodyPlayer != null)
            {
                GlobalServer.Instance.SendMessage(GameModel.Instance.BodyPlayer.Id, bankMessage.ToString());
            }
            if (GameModel.Instance.SoulPlayer != null)
            {
                GlobalServer.Instance.SendMessage(GameModel.Instance.SoulPlayer.Id, bankMessage.ToString());
            }
        }
Exemplo n.º 7
0
 IEnumerator GeneralMessagesCoroutine()
 {
     while (true)
     {
         while (Global.Instance.BankMessages.Count > 0)
         {
             BankMessage bankMessage = Global.Instance.BankMessages.Dequeue();
             SetBank(bankMessage.Cells, bankMessage.Nutrients, bankMessage.Thoughts, bankMessage.Ideas);
         }
         while (Global.Instance.CameraMessages.Count > 0)
         {
             CameraMessage cameraMessage = Global.Instance.CameraMessages.Dequeue();
             GetComponent <InputControl>().MoveCamera(cameraMessage.X, cameraMessage.Y);
         }
         yield return(null);
     }
 }
Exemplo n.º 8
0
        public async Task <bool> StartVideo()
        {
            // Start Recording
            // ->{"msg_id":513,"token":1}
            // <-{"rval":0,"msg_id":513 }
            // <-{ "msg_id": 7, "type": "start_video_record" }

            UserStartVideoMessage UsrMsg = new UserStartVideoMessage(_token);

            UserStartVideoMessageCodec UsrMsgCodec = new UserStartVideoMessageCodec();

            // Send the message
            if (await Send(await UsrMsgCodec.Encode(UsrMsg)))
            {
                // If sent, get the first response message
                string MsgReceived = await _CameraSocket.Receive();

                CameraMessageCodec CamEchoCodec = new CameraMessageCodec();
                CameraMessage      CamEchoMsg   = await CamEchoCodec.Decode(MsgReceived);

                if (CamEchoMsg.msg_id != UsrMsg.msg_id)
                {
                    return(false);
                }

                //Receive the start_video message
                MsgReceived = null;
                MsgReceived = await _CameraSocket.Receive();

                CamStartCaptureMessageCodec CamCodec = new CamStartCaptureMessageCodec();
                CamStartCaptureMessage      CamMsg   = await CamCodec.Decode(MsgReceived);

                // Check if photo capture is started
                if (CamMsg.msg_id != CamStartCaptureMessage.msg_id_expected && !CamMsg.type.Equals(CamStartCaptureMessage.video_expected))
                {
                    return(false);
                }
                // If everything OK, return true
                _recording = true;
                return(true);
            }
            return(false);
        }
Exemplo n.º 9
0
    private void OnCameraMessage(CameraMessage value)
    {
        if (!_PanEnabled)
        {
            return;
        }

        if (value.Action == CameraAction.START_DRAG)
        {
            _oldPosition    = transform.position;
            _viewportOrigin = Camera.main.ScreenToViewportPoint(Input.mousePosition);
        }
        else
        {
            _newPosition       = Camera.main.ScreenToViewportPoint(Input.mousePosition) - _viewportOrigin;
            _newPosition.z     = _newPosition.y;
            _newPosition.y     = 0;
            transform.position = _oldPosition + -_newPosition * PanSpeed;
        }
    }
Exemplo n.º 10
0
        /// <summary>
        /// Serialises the currently active objects in for playback from file.
        /// </summary>
        /// <param name="writer">The write to serialise to.</param>
        /// <param name="info">Statistics</param>
        /// <returns>An error code on failure.</returns>
        public override Error Serialise(BinaryWriter writer, ref SerialiseInfo info)
        {
            Error err = new Error();

            info.PersistentCount = info.TransientCount = 0;
            if (_cameras.Count > 0)
            {
                PacketBuffer  packet = new PacketBuffer(256);
                CameraMessage msg    = new CameraMessage();
                Vector3       v      = Vector3.zero;
                msg.Reserved1 = 0;
                msg.Reserved2 = 0;
                foreach (CameraInfo camera in _cameras.Values)
                {
                    ++info.PersistentCount;
                    msg.CameraID = camera.ID;
                    v            = FrameTransform.UnityToRemote(camera.transform.localPosition, ServerInfo.CoordinateFrame);
                    msg.X        = v.x;
                    msg.Y        = v.y;
                    msg.Z        = v.z;
                    v            = FrameTransform.UnityToRemote(camera.transform.forward, ServerInfo.CoordinateFrame);
                    msg.DirX     = v.x;
                    msg.DirY     = v.y;
                    msg.DirZ     = v.z;
                    v            = FrameTransform.UnityToRemote(camera.transform.up, ServerInfo.CoordinateFrame);
                    msg.UpX      = v.x;
                    msg.UpY      = v.y;
                    msg.UpZ      = v.z;
                    msg.Near     = camera.Near;
                    msg.Far      = camera.Far;
                    msg.FOV      = camera.FOV;
                    packet.Reset(RoutingID, 0);
                    msg.Write(packet);
                    packet.FinalisePacket();
                    packet.ExportTo(writer);
                }
            }

            return(err);
        }
Exemplo n.º 11
0
        /// <summary>
        /// The primary message handling function.
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        public override Error ReadMessage(PacketBuffer packet, BinaryReader reader)
        {
            CameraMessage msg = new CameraMessage();

            if (!msg.Read(reader))
            {
                return(new Error(ErrorCode.MalformedMessage));
            }

            CameraInfo camera = null;

            if (_cameras.ContainsKey(msg.CameraID))
            {
                camera = _cameras[msg.CameraID];
            }
            else
            {
                GameObject obj = new GameObject(string.Format("Camera {0}", msg.CameraID));
                camera = obj.AddComponent <CameraInfo>();
                _cameras.Add(msg.CameraID, camera);
                obj.transform.SetParent(_root.transform, false);
                camera.ID = msg.CameraID;
            }

            camera.Near = msg.Near;
            camera.Far  = msg.Far;
            camera.FOV  = msg.FOV;

            Transform transform = camera.transform;
            Vector3   dir       = FrameTransform.RemoteToUnity(new Vector3(msg.DirX, msg.DirY, msg.DirZ), ServerInfo.CoordinateFrame);
            Vector3   up        = FrameTransform.RemoteToUnity(new Vector3(msg.UpX, msg.UpY, msg.UpZ), ServerInfo.CoordinateFrame);

            transform.localPosition = FrameTransform.RemoteToUnity(new Vector3(msg.X, msg.Y, msg.Z), ServerInfo.CoordinateFrame);
            transform.LookAt(transform.position + dir, up);

            return(new Error());
        }
        private async Task TakePicture(CameraMessage cameraMessage)
        {
            if (this.isCameraInitializing)
            {
                await this.SendResult(new ResultMessage(cameraMessage) { ResultId = -3, Result = "Initializing" });

                return;
            }

            await this.dispatcher.RunAsync(
                CoreDispatcherPriority.Normal,
                async() =>
            {
                lock (this.keysInProcess)
                {
                    this.keysInProcess["CAMERA"] = true;
                }

                await this.InitializeCamera();

                var imageName = "photo_" + DateTime.Now.Ticks + ".jpg";
                foreach (
                    var destination in
                    this.destinations.Where(destination => destination.CheckPrefix(cameraMessage.Url)))
                {
                    imageName = destination.ParseAddressForFileName(cameraMessage.Url);
                    break;
                }

                StorageFile stream = null;
                try
                {
                    var timeout = DateTime.Now.AddSeconds(5);
                    while (!this.camera.isPreviewing && DateTime.Now < timeout)
                    {
                        await Task.Delay(250);
                    }

                    stream = await this.camera.Capture(imageName);
                }
                catch (Exception e)
                {
                    await
                    this.SendResult(new ResultMessage(cameraMessage)
                    {
                        ResultId = -99, Result = e.Message
                    });
                    lock (this.keysInProcess)
                    {
                        this.keysInProcess["CAMERA"] = false;
                    }

                    return;
                }

                // stores the image in Azure BLOB Storage
                var memStream  = new MemoryStream();
                var fileStream = await stream.OpenStreamForReadAsync();
                await fileStream.CopyToAsync(memStream);

                if (!await this.SendToDestinations(cameraMessage, memStream, KnownFolders.PicturesLibrary))
                {
                    await this.SendResult(new ResultMessage(cameraMessage)
                    {
                        Result = imageName
                    });
                }

                lock (this.keysInProcess)
                {
                    this.keysInProcess["CAMERA"] = false;
                }
            });
        }
Exemplo n.º 13
0
        public async Task <string> TakePhoto()
        {
            // Take Photo
            // ->{"msg_id":769,"token":1}
            // <-{"rval":0,"msg_id":769}
            // <-{ "msg_id": 7, "type": "start_photo_capture" }
            // <-{ "msg_id": 7, "type": "photo_taken" ,"param":"/tmp/fuse_d/DCIM/100MEDIA/SJCM0004.jpg"}
            // <-{ "msg_id": 7, "type": "photo_taken" ,"param":"/tmp/fuse_d/DCIM/100MEDIA/SJCM0004.jpg"}

            UserTakePhotoMessage      UsrMsg      = new UserTakePhotoMessage(_token);
            UserTakePhotoMessageCodec UsrMsgCodec = new UserTakePhotoMessageCodec();
            // Send the message
            string MsgSent = await UsrMsgCodec.Encode(UsrMsg);

            if (await Send(MsgSent))
            {
                // If sent, get the first response message
                string MsgReceived = await _CameraSocket.Receive();

                CameraMessageCodec CamEchoCodec = new CameraMessageCodec();
                CameraMessage      CamEchoMsg   = await CamEchoCodec.Decode(MsgReceived);

                if (CamEchoMsg.msg_id != UsrMsg.msg_id)
                {
                    return(null);
                }

                //Receive the start_photo_capture message
                MsgReceived = null;
                MsgReceived = await _CameraSocket.Receive();

                CamStartCaptureMessageCodec CamCodec = new CamStartCaptureMessageCodec();
                CamStartCaptureMessage      CamMsg   = await CamCodec.Decode(MsgReceived);

                // Check if photo capture is started
                if (CamMsg.msg_id != CamStartCaptureMessage.msg_id_expected && !CamMsg.type.Equals(CamStartCaptureMessage.photo_expected))
                {
                    return(null);
                }

                //Receive the Photo name
                MsgReceived = null;
                MsgReceived = await _CameraSocket.Receive();

                CamCaptureDoneMessageCodec CptrDoneCodec = new CamCaptureDoneMessageCodec();
                CamCaptureDoneMessage      CptrDoneMsg   = await CptrDoneCodec.Decode(MsgReceived);

                // Check if msg_id and type are the expected
                if (CptrDoneMsg.msg_id != CamCaptureDoneMessage.msg_id_expected && !CptrDoneMsg.type.Equals(CamCaptureDoneMessage.photo_expected))
                {
                    return(null);
                }

                //Receive the Photo name again
                MsgReceived = null;
                MsgReceived = await _CameraSocket.Receive();

                CptrDoneCodec = new CamCaptureDoneMessageCodec();
                CptrDoneMsg   = await CptrDoneCodec.Decode(MsgReceived);

                // Check if msg_id and type are the expected
                if (CptrDoneMsg.msg_id != CamCaptureDoneMessage.msg_id_expected && !CptrDoneMsg.type.Equals(CamCaptureDoneMessage.photo_expected))
                {
                    return(null);
                }

                // Return the location of the taken photo
                return(GetMediaLocation(CptrDoneMsg.param));
            }
            // If there is a problem
            return(null);
        }