示例#1
0
        /// <summary>
        /// Inicializar datos de la nube
        /// </summary>
        private void InitCloudData(string domain = DomoticCloud.BASE_DOMAIN)
        {
            var credential = ConfigurationManager.Get <IServerCredential>();

            if (credential != null && !string.IsNullOrEmpty(credential.CredentialId))
            {
                Domotic.InitCloud(new ServerCredential
                {
                    CredentialId     = credential.CredentialId,
                    CredentialSecret = credential.CredentialSecret
                }, domain);
            }
            try {
                using (var context = new DeviceServerContext()) {
                    context.ServerUserAccesses.RemoveRange(context.ServerUserAccesses.ToList());
                    var accesses = Domotic.Cloud.UserAccesses.GetServerAccesses();
                    if (accesses != null)
                    {
                        Debug.WriteLine(this, $"Se obtuvieron {accesses.Count} accesos desde la nube", VerbosityLevel.Info);
                        using (ServerUserAccessRepository accessRepository = new ServerUserAccessRepository()) {
                            accessRepository.SaveAccesses(accesses);
                        }
                    }
                    else
                    {
                        Debug.WriteLine(this, "No se pudieron obtener los accesos de usuarios desde la nube", VerbosityLevel.Info);
                    }
                }
            } catch (Exception) {
                Debug.WriteLine(this, "No se pudieron obtener los accesos de usuarios desde la nube", VerbosityLevel.Error);
            }
        }
示例#2
0
        /// <summary>
        /// Al conectarse Pusher
        /// </summary>
        /// <param name="sender"></param>
        private void Pusher_Connected(object sender)
        {
            var credential = ConfigurationManager.Get <IServerCredential>();

            if (credential == null)
            {
                return;
            }
            try {
                string channelName = "private-server-control-" + credential.ServerId;
                if (_pusher.Channels.ContainsKey(channelName))
                {
                    _pusherChannel = _pusher.Channels[channelName];
                    return;
                }
                else
                {
                    _pusherChannel = _pusher.Subscribe(channelName);
                }
            } catch (Exception e) {
                Debug.WriteLine(this, "No se pudo iniciar el gestor de canales Cloud debido a un error de Pusher:", VerbosityLevel.Error);
                Debug.WriteLine(this, e.Message, VerbosityLevel.Error);
                return;
            }
            _pusherChannel.Bind("userAdd", (dynamic data) =>
            {
                Debug.WriteLine(this, "Recibido evento Pusher de adición de usuario " + JsonConvert.SerializeObject(data), VerbosityLevel.Debug);
                Json.Parse <ServerUserAccess>((string)data, s =>
                {
                    Debug.WriteLine(this, "Acceso recibido desde mensaje Pusher", VerbosityLevel.Debug);
                    using (ServerUserAccessRepository suaRepo = new ServerUserAccessRepository()) {
                        suaRepo.SaveAccess(s);
                    }
                });
            });
            using (ServerUserAccessRepository suaRepo = new ServerUserAccessRepository()) {
                List <ServerUserAccess> accesses = suaRepo.GetAccesses();
                foreach (ServerUserAccess access in accesses)
                {
                    AddChannel(access);
                }
            }
            Debug.WriteLine(this, "Gestor de canales Cloud inicializado", VerbosityLevel.Info);
        }
示例#3
0
 /// <summary>
 /// Al recibir un mensaje por el canal
 /// </summary>
 /// <param name="sender">Emisor</param>
 /// <param name="e">Mensaje</param>
 private void Channel_OnMessage(object sender, string e)
 {
     if (Access == null)
     {
         Json.Parse <ServerUserAccess>(e, a =>
         {
             using (ServerUserAccessRepository repo = new ServerUserAccessRepository()) {
                 Database.Models.ServerUserAccess savedAccess = repo.GetAccess(a.UserIdentifier, a.Identifier);
                 if (savedAccess != null)
                 {
                     Access = a;
                     Debug.WriteLine(this, "Se autorizo a un usuario en el sistema", VerbosityLevel.Debug);
                 }
                 else
                 {
                     Debug.WriteLine(this, "No se pudo autorizar a un usuario en el sistema", VerbosityLevel.Debug);
                 }
             }
         });
     }
     Json.Parse <DeviceUpdate>(e, (u) =>
     {
         OnRequestsUpdate?.Invoke(this, u);
     });
     Json.Parse <DeviceConfiguration>(e, (c) =>
     {
         OnConfigureDevice?.Invoke(this, c);
     });
     Json.Parse <DeviceTranslation>(e, (t) =>
     {
         OnTranslateDevice?.Invoke(this, t);
     });
     Json.Parse <UserDataRequest>(e, (r) =>
     {
         OnDataRequest?.Invoke(this, r);
     });
 }