コード例 #1
0
        public void UpdateMessages(FirebaseEvent <Message> observer)
        {
            var message = Messages.FirstOrDefault(f => f.FirebaseKey == observer.Key);

            if (observer.EventType == FirebaseEventType.Delete && message != null)
            {
                Messages.Remove(message);
                return;
            }

            if (observer.EventType == FirebaseEventType.Delete)
            {
                return;
            }

            if (message != null)
            {
                message.Text      = observer.Object.Text;
                message.TimeStamp = observer.Object.TimeStamp;
                return;
            }

            observer.Object.FirebaseKey = observer.Key;

            Messages.Add(observer.Object);
        }
コード例 #2
0
        /// <summary>
        /// Starts observing the real-time Database. Events will be fired both when change is done locally and remotely.
        /// </summary>
        /// <returns> Stream of <see cref="FirebaseEvent{T}"/>. </returns>
        public IObservable <FirebaseEvent <T> > AsObservable()
        {
            if (this.observable == null)
            {
                var initialData = this.Database.Count == 0
                    ? Observable.Return(FirebaseEvent <T> .Empty(FirebaseEventSource.Offline))
                    : this.Database
                                  .Where(kvp => !string.IsNullOrEmpty(kvp.Value.Data) && kvp.Value.Data != "null" && !kvp.Value.IsPartial)
                                  .Select(kvp => new FirebaseEvent <T>(kvp.Key, kvp.Value.Deserialize <T>(), FirebaseEventType.InsertOrUpdate, FirebaseEventSource.Offline))
                                  .ToList()
                                  .ToObservable();

                this.observable = initialData
                                  .Merge(this.subject)
                                  .Merge(this.GetInitialPullObservable()
                                         .RetryAfterDelay(TimeSpan.FromSeconds(10))
                                         .SelectMany(e => e)
                                         .Do(this.SetObjectFromInitialPull)
                                         .Select(e => new FirebaseEvent <T>(e.Key, e.Object, FirebaseEventType.InsertOrUpdate, FirebaseEventSource.Online))
                                         .Concat(Observable.Create <FirebaseEvent <T> >(observer => this.InitializeStreamingSubscription(observer))))
                                  .Replay()
                                  .RefCount();
            }

            return(this.observable);
        }
コード例 #3
0
 private void OnRoomFound(FirebaseEvent <Chatroom> chatroom)
 {
     if (!chatroom.Object.IsAvailable)
     {
         return;
     }
     if (chatroom.EventType == FirebaseEventType.Delete)
     {
         return;
     }
     if (_currentChatroom != "")
     {
         return;
     }
     if (chatroom.Object.User1 == _currentUser.LocalId ||
         chatroom.Object.User2 == _currentUser.LocalId)
     {
         _currentChatroom = chatroom.Key;
         _eventAggregator.GetEvent <RoomFoundEvent>().Publish();
     }
     _messageObservable = _firebaseClient.Child($"chatrooms/{_currentChatroom}/messages").AsObservable <MessageModel>().Subscribe(
         message =>
     {
         message.Object.Sender = message.Object.Sender == _currentUser.LocalId ? "Me" : "Other";
         _eventAggregator.GetEvent <ReceiveEvent>().Publish(message.Object);
         _messageMedia.Start();
     });
 }
コード例 #4
0
        public void IncomingNavigationRequest(FirebaseEvent <NavigateRequestDto> observer)
        {
            lock (_updateLock)
            {
                IsNavigationActive = observer.Object.CallActive;
                InitiatorEmail     = observer.Object.InitiatorEmail;
                IsRequestAccepted  = observer.Object.IsRequestedAccepted;
                IsRequestDeclined  = observer.Object.IsRequestDeclined;

                if (observer.Object.InitiatorEmail != ActiveUser.EmailAddress &&
                    observer.Object.InitiatorEmail != string.Empty &&
                    IsNavigationActive)
                {
                    NavigationReqest?.Invoke(this, new EventArgs());
                }

                if (IsRequestDeclined)
                {
                    NavigationDeclined?.Invoke(this, new EventArgs());
                }

                if (IsInitiator && IsNavigationActive && IsRequestAccepted)
                {
                    NavigationAccepted?.Invoke(this, new EventArgs());
                }
            }
        }
コード例 #5
0
        public void UpdateCordinates(FirebaseEvent <MapDto> observer)
        {
            if (IsInitiator)
            {
                if (InitiatorLatitude != observer.Object.InitiatorLatitude ||
                    InitiatorLongitude != observer.Object.InitiatorLongitude)
                {
                    InitiatorLatitude  = observer.Object.InitiatorLatitude;
                    InitiatorLongitude = observer.Object.InitiatorLongitude;

                    OtherUserCordinatesUpdated?.Invoke(this, new EventArgs());
                }
            }
            else
            {
                if (ResponderLatitude != observer.Object.ResponderLatitude ||
                    ResponderLongitude != observer.Object.ResponderLongitude)
                {
                    ResponderLatitude  = observer.Object.ResponderLatitude;
                    ResponderLongitude = observer.Object.ResponderLongitude;

                    OtherUserCordinatesUpdated?.Invoke(this, new EventArgs());
                }
            }
        }
コード例 #6
0
 private void OnItemMessage(FirebaseEvent <PedidoFireBase> message)
 {
     if (message.EventType == FirebaseEventType.InsertOrUpdate)
     {
         this.Activity.RunOnUiThread(() => Toast.MakeText(this.Activity, message.Object.descripcion, ToastLength.Short).Show());
     }
 }
コード例 #7
0
        public void UpdateFriendList(FirebaseEvent <Friend> observer)
        {
            var friend = FriendList.FirstOrDefault(f => f.FirebaseKey == observer.Key);

            if (observer.EventType == FirebaseEventType.Delete && friend != null)
            {
                FriendList.Remove(friend);
                return;
            }

            if (observer.EventType == FirebaseEventType.Delete)
            {
                return;
            }

            if (friend != null)
            {
                friend.EmailAddress = observer.Object.EmailAddress;
                return;
            }

            observer.Object.FirebaseKey = observer.Key;

            FriendList.Add(observer.Object);
        }
コード例 #8
0
        /// <summary>
        /// Starts observing the real-time Database. Events will be fired both when change is done locally and remotely.
        /// </summary>
        /// <returns> Stream of <see cref="FirebaseEvent{T}"/>. </returns>
        public IObservable <FirebaseEvent <T> > AsObservable()
        {
            if (this.observable == null)
            {
                var initialData = this.Database.Count == 0
                    ? Observable.Return(FirebaseEvent <T> .Empty(FirebaseEventSource.Offline))
                    : this.Database
                                  .Where(kvp => !string.IsNullOrEmpty(kvp.Value.Data) && kvp.Value.Data != "null" && !kvp.Value.IsPartial)
                                  .Select(kvp => new FirebaseEvent <T>(kvp.Key, kvp.Value.Deserialize <T>(), FirebaseEventType.InsertOrUpdate, FirebaseEventSource.Offline))
                                  .ToList()
                                  .ToObservable();

                this.observable = initialData
                                  .Merge(this.subject)
                                  .Merge(this.GetInitialPullObservable()
                                         .RetryAfterDelay <IReadOnlyCollection <FirebaseObject <T> >, FirebaseException>(
                                             this.childQuery.Client.Options.SyncPeriod,
                                             ex => ex.StatusCode == System.Net.HttpStatusCode.OK) // OK implies the request couldn't complete due to network error.
                                         .SelectMany(e => e)
                                         .Do(this.SetObjectFromInitialPull)
                                         .Select(e => new FirebaseEvent <T>(e.Key, e.Object, FirebaseEventType.InsertOrUpdate, FirebaseEventSource.Online))
                                         .Concat(Observable.Create <FirebaseEvent <T> >(observer => this.InitializeStreamingSubscription(observer))))
                                  .Do(next => { }, e => this.observable = null, () => this.observable = null)
                                  .Replay()
                                  .RefCount();
            }

            return(this.observable);
        }
コード例 #9
0
        public void On(string route, FirebaseEvent evt, Action <string, DataBranch> callback)
        {
            if (!parsers.ContainsKey(route))
            {
                parsers.Add(route, new FirebaseStreamParser(route));
            }
            var parser = parsers[route];

            switch (evt)
            {
            case FirebaseEvent.Added:
                parser.Added += callback;
                break;

            case FirebaseEvent.Changed:
                parser.Changed += callback;
                break;

            case FirebaseEvent.Deleted:
                parser.Deleted += callback;
                break;

            default:
                break;
            }
        }
コード例 #10
0
ファイル: BattleManager.cs プロジェクト: rythos42/GameThing
        private void OnDataUpdated(FirebaseEvent <BattleData> evt)
        {
            currentBattle = evt.Object;

            if (currentBattle.LastPlayingPlayerId != ApplicationData.PlayerId)
            {
                DataUpdated?.Invoke(evt.Object);
            }
        }
コード例 #11
0
        // handle new messages from firebase
        private async void HandleServerRequest(FirebaseEvent <string> data, FirebaseClient Firebase, FirebaseAuthLink auth)
        {
            if (data.EventType == FirebaseEventType.InsertOrUpdate && data.Object.ToLower() != "false") // new message arrives
            {
                await Dispatcher.BeginInvoke((Action)(() => StartServerRequest(data.Object)));

                await Firebase.Child("Users/" + auth.User.LocalId + "/PC/message").PutAsync("false");
            }
        }
コード例 #12
0
        public void CustomerSubscribedEvent(FirebaseEvent <Customer> sender)
        {
            //fix this
            string newkey = sender.Key;

            if (newkey != previouskey)
            {
                Console.WriteLine("Update, Name" + sender.Object.Name);
            }
            previouskey = newkey;
        }
コード例 #13
0
 private void getWinner(FirebaseEvent <Winner> u)
 {
     if (u.Object != null)
     {
         if (u.EventType == FirebaseEventType.Delete)
         {
             setWinner(u.Object.Name, "remove");
             return;
         }
         setWinner(u.Object.Name, "set");
     }
 }
コード例 #14
0
 private void getSetting(FirebaseEvent <DrawSetting> s)
 {
     if (s.Object != null)
     {
         drawSetting.Key            = s.Key;
         drawSetting.EnableWageVote = s.Object.EnableWageVote;
         drawSetting.Wage           = s.Object.Wage;
         if (s.Object.EnableWageVote)
         {
             btnWageUp.Enabled = !AuthUser.Instance.wageUpVote;
         }
     }
 }
コード例 #15
0
 private void updateData(FirebaseEvent <InboundMessage> f)
 {
     if (!Dispatcher.CheckAccess())
     {
         Dispatcher.Invoke(new updateDataDel(updateData), f);
     }
     else
     {
         x.Add(x.Count + 1);
         string        tmp  = f.Object.temp.Substring(0, 5);
         StringBuilder strb = new StringBuilder(tmp);
         strb[2] = ',';
         y.Add(Convert.ToDouble(strb.ToString()));
         linegraph.Plot(x, y); // x and y are IEnumerable<double>
     }
 }
コード例 #16
0
 private void getMonitor(FirebaseEvent <Monitor> l)
 {
     if (l.Object != null)
     {
         if (l.EventType == FirebaseEventType.Delete)
         {
             SetText(false);
         }
         if (monitor.ContainsKey(l.Key))
         {
             return;
         }
         monitor.Add(l.Key, l.Object.Message);
         SetText(l.Object.Message + "\n");
     }
 }
コード例 #17
0
        /// <summary>
        /// Starts observing the real-time Database. Events will be fired both when change is done locally and remotely.
        /// </summary>
        /// <returns> Stream of <see cref="FirebaseEvent{T}"/>. </returns>
        public IObservable <FirebaseEvent <T> > AsObservable()
        {
            if (!this.isSyncRunning)
            {
                this.isSyncRunning = true;
                Task.Factory.StartNew(this.SynchronizeThread, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
            }

            if (this.observable == null)
            {
                var initialData = Observable.Return(FirebaseEvent <T> .Empty(FirebaseEventSource.Offline));
                if (this.Database.TryGetValue(this.elementRoot, out OfflineEntry oe))
                {
                    initialData = Observable.Return(oe)
                                  .Where(offlineEntry => !string.IsNullOrEmpty(offlineEntry.Data) && offlineEntry.Data != "null" && !offlineEntry.IsPartial)
                                  .Select(offlineEntry => new FirebaseEvent <T>(offlineEntry.Key, offlineEntry.Deserialize <T>(), FirebaseEventType.InsertOrUpdate, FirebaseEventSource.Offline));
                }
                else if (this.Database.Count > 0)
                {
                    initialData = this.Database
                                  .Where(kvp => !string.IsNullOrEmpty(kvp.Value.Data) && kvp.Value.Data != "null" && !kvp.Value.IsPartial)
                                  .Select(kvp => new FirebaseEvent <T>(kvp.Key, kvp.Value.Deserialize <T>(), FirebaseEventType.InsertOrUpdate, FirebaseEventSource.Offline))
                                  .ToList()
                                  .ToObservable();
                }

                this.observable = initialData
                                  .Merge(this.subject)
                                  .Merge(this.GetInitialPullObservable()
                                         .RetryAfterDelay <IReadOnlyCollection <FirebaseObject <T> >, FirebaseException>(
                                             this.childQuery.Client.Options.SyncPeriod,
                                             ex => ex.StatusCode == System.Net.HttpStatusCode.OK) // OK implies the request couldn't complete due to network error.
                                         .Select(e => this.ResetDatabaseFromInitial(e))
                                         .SelectMany(e => e)
                                         .Do(this.SetObjectFromInitialPull)
                                         .Select(e => new FirebaseEvent <T>(e.Key, e.Object, e.Object == null ? FirebaseEventType.Delete : FirebaseEventType.InsertOrUpdate, FirebaseEventSource.OnlineInitial))
                                         .Concat(Observable.Create <FirebaseEvent <T> >(observer => this.InitializeStreamingSubscription(observer))))
                                  .Do(next => { }, e => this.observable = null, () => this.observable = null)
                                  .Replay()
                                  .RefCount();
            }

            return(this.observable);
        }
コード例 #18
0
 private void displayMessage(FirebaseEvent <InboundMessage> item)
 {
     if (this.InvokeRequired)
     {
         this.Invoke(new displayMessageDelegate(this.displayMessage), item);
     }
     else
     {
         if (item.Object?.Recipient == Form1.username && item.Object?.Author == partner)
         {
             textBox3.Text += item.Object.Author + ": " + item.Object.Content + "\r\n";
         }
         else if (item.Object?.Recipient == Form1.username && item.Object?.Author == partner && item.Object?.File != null)
         {
             textBox3.Text += item.Object.Author + ": " + item.Object.Filename + "\r\n";
             File.WriteAllLines("C:\\Users\\szicsa\\Downloads" + item.Object.Filename, item.Object.File);
         }
     }
 }
 private void VotedObserver(FirebaseEvent <Vote> data)
 {
     if (data.Key != null && !data.Key.Equals(""))
     {
         bool doesExists = false;
         if (voted.Count > 0)
         {
             foreach (var vote in voted)
             {
                 if (vote.ID == data.Object.ID)
                 {
                     doesExists = true;
                 }
             }
         }
         if (doesExists == false)
         {
             Vote this_vote = new Vote(data.Object.ID, data.Object.VoteMale, data.Object.VoteFemale);
             Console.WriteLine("Voted Observer | Added to voted: {0}", this_vote.ID);
             voted.Add(this_vote);
         }
     }
 }
コード例 #20
0
ファイル: HomeActivity.cs プロジェクト: jdarjona/DataASW
        //Comprobamos que la notificacion de cambio del estado del pedido es diferente a la inicial y así mandar la notificación
        private async void OnItemMessage(FirebaseEvent <Dictionary <string, PedidoFireBase> > message)
        {
            String empresa;

            if (message.Key.Contains("Liege"))
            {
                empresa = Monitorizacion.empresaLiege;
            }
            else
            {
                empresa = Monitorizacion.empresaSevilla;
            }

            foreach (KeyValuePair <string, PedidoFireBase> item in message.Object)
            {
                string pedMessage    = item.Value.codPedido.ToString();
                string estadoMessage = item.Value.descripcion.ToString();


                if (Monitorizacion.listMonitorizacionLieja != null || Monitorizacion.listMonitorizacionSevilla != null)
                {
                    var pedido = Monitorizacion.listMonitorizacionLieja.Where(q => q.codigoPedido.Equals(item.Value.codPedido)).FirstOrDefault();
                    if (pedido == null)
                    {
                        pedido = Monitorizacion.listMonitorizacionSevilla.Where(q => q.codigoPedido.Equals(item.Value.codPedido)).FirstOrDefault();
                    }



                    if (pedido != null)
                    {
                        if (pedido.Estado != item.Value.estado)
                        {
                            await Monitorizacion.getListMonitorizacion(empresa);

                            notificar(item.Value);
                        }
                    }
                    else
                    {
                        await Monitorizacion.getListMonitorizacion(empresa);

                        notificar(item.Value);
                    }
                }
                //if (Monitorizacion.listMonitorizacion.Count > 0)
                //{
                //    for (int i = 0; i < Monitorizacion.listMonitorizacion.Count; i++)
                //    {
                //        string pedidoListado = Monitorizacion.listMonitorizacion[i].codigoPedido.ToString();
                //        if (item.Value.codPedido.Equals(Monitorizacion.listMonitorizacion[i].codigoPedido))
                //        {
                //            string estadoListado = Monitorizacion.listMonitorizacion[i].Estado.ToString();
                //            if (!Monitorizacion.listMonitorizacion[i].Estado.Equals(item.Value.descripcion) && (message.EventType == FirebaseEventType.InsertOrUpdate))
                //            {
                //                notificar(item.Value);
                //            }
                //        }
                //    }
                //}
            }
        }
コード例 #21
0
 private void UpdateHighscores(FirebaseEvent <Highscore> firebaseEvent)
 {
     this.Highscores = this.db.GetHighscores();
     this.OnPropertyChanged(nameof(this.Highscores));
 }
コード例 #22
0
 public void OnNext(FirebaseEvent <T> value)
 {
     //process value
 }
コード例 #23
0
        private void VotedObserver(FirebaseEvent <Vote> data)
        {
            if (data.Key != null && !data.Key.Equals(""))
            {
                bool doesExists = false;
                if (voted.Count > 0)
                {
                    foreach (var vote in voted)
                    {
                        if (vote.ID == data.Object.ID)
                        {
                            doesExists = true;
                        }
                    }
                }
                if (doesExists == false)
                {
                    Vote this_vote = new Vote(data.Object.ID, data.Object.VoteMale, data.Object.VoteFemale);
                    Console.WriteLine("Voted Observer | Added to voted: {0}", this_vote.ID);
                    voted.Add(this_vote);

                    totalVotes++;

                    switch (this_vote.VoteMale)
                    {
                    case 1920987:
                        votesM[0]++;
                        break;

                    case 1820826:
                        votesM[1]++;
                        break;

                    case 1520293:
                        votesM[2]++;
                        break;

                    default:
                        Console.WriteLine("Voted Observer | VoteMale ID Not Found: {0}", this_vote.VoteMale);
                        break;
                    }
                    switch (this_vote.VoteFemale)
                    {
                    case 1921078:
                        votesF[0]++;
                        break;

                    case 1820364:
                        votesF[1]++;
                        break;

                    case 1520045:
                        votesF[2]++;
                        break;

                    default:
                        Console.WriteLine("Voted Observer | VoteFemale ID Not Found: {0}", this_vote.VoteFemale);
                        break;
                    }
                }
            }
        }
コード例 #24
0
 private void getJoinMembers(FirebaseEvent <JoinMember> m)
 {
     setCurrentSession(m);
 }
コード例 #25
0
        private void setCurrentSession(FirebaseEvent <JoinMember> m)
        {
            if (this.lblVoted.InvokeRequired || this.btnJoin.InvokeRequired || this.btnWageUp.InvokeRequired)
            {
                SetCurrentSessionCallback d = new SetCurrentSessionCallback(setCurrentSession);
                this.Invoke(d, new object[] { m });
            }
            else
            {
                if (m.Object == null)
                {
                    btnJoin.Enabled = true;
                    return;
                }
                switch (m.EventType)
                {
                case FirebaseEventType.InsertOrUpdate:
                    if (joinKey == null)
                    {
                        btnJoin.Enabled = true;
                    }
                    if (m.Object.Username == AuthUser.Instance.Username)
                    {
                        AuthUser.Instance.BetWage = m.Object.BetWage;
                        joinKey                      = m.Key;
                        btnJoin.Enabled              = false;
                        btnWageUp.Enabled            = drawSetting.EnableWageVote ? !m.Object.wageUpVote : false;
                        AuthUser.Instance.wageUpVote = m.Object.wageUpVote;
                    }
                    if (!currentSession.ContainsKey(m.Key))
                    {
                        currentSession.Add(m.Key, m.Object);
                        wageCollection.Add(m.Key, m.Object.wageUpVote);
                        if (m.Object.wageUpVote)
                        {
                            wageUpVoteCtr++;
                        }
                    }
                    else
                    {
                        if (m.Object.wageUpVote && !wageCollection[m.Key])
                        {
                            wageUpVoteCtr++;
                        }
                        else if (!m.Object.wageUpVote && wageCollection[m.Key])
                        {
                            wageUpVoteCtr--;
                        }
                        wageCollection[m.Key] = m.Object.wageUpVote;
                    }
                    break;

                case FirebaseEventType.Delete:
                    if (m.Key == joinKey)
                    {
                        btnWageUp.Enabled            = false;
                        btnJoin.Enabled              = true;
                        joinKey                      = null;
                        AuthUser.Instance.wageUpVote = false;
                        wageUpVoteCtr                = wageUpVoteCtr <= 0 ? 0 : wageUpVoteCtr--;
                    }
                    currentSession.Remove(m.Key);
                    break;

                default:
                    break;
                }
                if (currentSession.Count <= 0)
                {
                    lblVoted.Text = Constants.NO_SESSION;
                    wageUpVoteCtr = 0;
                }
                else
                {
                    lblVoted.Text = wageUpVoteCtr.ToString() + " / " + currentSession.Count + " voted";
                }
            }
        }