/// <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); } }
/// <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); }
/// <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); }); }