/// <summary> /// Inicializar canal de nube /// </summary> /// <param name="access">Acceso</param> /// <param name="pusher">Instancia de Pusher</param> public CloudChannel(ServerUserAccess access, Channel pusherChannel) { _bindedAccess = access; _pusherChannel = pusherChannel; _pusherChannel.Bind(access.UserIdentifier, (dynamic data) => { OnMessage?.Invoke(this, (string)data); }); }
/// <summary> /// Añadir canal en base a acceso /// </summary> /// <param name="access">Acceso</param> private void AddChannel(ServerUserAccess access) { if (m_channels.ContainsKey(access.UserIdentifier)) { return; } CloudChannel channel = new CloudChannel(access, _pusherChannel); m_channels.Add(access.UserIdentifier, channel); OnChannelConnected?.Invoke(this, channel); Debug.WriteLine(this, "Canal por acceso añadido", VerbosityLevel.Debug); }
/// <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); }); }
/// <summary> /// Guardar accesos nuevos en formato de API /// </summary> /// <param name="accesses">Accesos</param> public void SaveAccesses(IEnumerable <ApiServerUserAccess> accesses) { var dbAccesses = accesses.Select(a => ServerUserAccess.FromApiModel(a)); SaveAccesses(dbAccesses); }
/// <summary> /// Guardar acceso en base de datos /// </summary> /// <param name="access"></param> public void SaveAccess(ServerUserAccess access) { m_context.Add(access); m_context.SaveChanges(); }