Example #1
0
        public void LoadSesionWaitingRoom(string patientServiceType, string patientDocument)
        {
            patientServicesType = patientServiceType;
            patientDocuments    = patientDocument;

            // Se llena la información del paciente.
            object[] noteKeys   = { "onLineFrom", "id" };
            object[] noteValues = { ExistsPatient != null ? ExistsPatient : ServerValue.Timestamp, patientDocument };
            var      patient    = NSDictionary.FromObjectsAndKeys(noteValues, noteKeys, noteKeys.Length);

            // Envío la información del paciente.
            database.GetChild($"queques/{patientServiceType}/patients/{patientDocument}").UpdateChildValues(patient);
            ExistsPatient = ExistsPatient != null ? ExistsPatient : new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();

            // Si el paciente se desconecta, se limpia la información de la base de datos.
            database.GetChild($"queques/{patientServiceType}/patients/{patientDocument}").RemoveValueOnDisconnect();
            database.GetChild($"display/{patientDocument}").RemoveValueOnDisconnect();

            // Me suscribo a la información relevante para el paciente conectado.
            var messages = database.GetChild($"display/{patientDocument}");

            handleReferencePatient = messages.ObserveEvent(DataEventType.Value, (snapshot) => {
                // Do magic with the folder data
                PatientRealTime patientLocal = null;

                if (snapshot.GetValue() != NSNull.Null)
                {
                    var folderData = snapshot.GetValue <NSDictionary>();
                    var position   = folderData.ValueForKey((NSString)"position");
                    var room       = folderData.ValueForKey((NSString)"room");
                    var doctor     = folderData.ValueForKey((NSString)"doctor");
                    var onLineFrom = folderData.ValueForKey((NSString)"onLineFrom");

                    patientLocal = new PatientRealTime
                    {
                        Position   = position == null ? 1 : Convert.ToInt32(position.ToString()),
                        Doctor     = doctor == null ? 0 : Convert.ToInt32(doctor.ToString()),
                        OnLineFrom = onLineFrom?.ToString(),
                        Room       = room?.ToString()
                    };

                    MessagingCenter.Send(KEY_MESSAGE, KEY_MESSAGE, patientLocal);
                }
            });
        }
        public void OnDataChange(DataSnapshot snapshot)
        {
            if (snapshot.Value != null)
            {
                var position   = snapshot.Child("position").Value;
                var room       = snapshot.Child("room").Value;
                var doctor     = snapshot.Child("doctor").Value;
                var onLineFrom = snapshot.Child("onLineFrom").Value;
                var patient    = new PatientRealTime
                {
                    Position   = (int?)position,
                    Doctor     = (int?)doctor,
                    OnLineFrom = onLineFrom?.ToString(),
                    Room       = room?.ToString()
                };

                MessagingCenter.Send(QueingFirebaseService.KEY_MESSAGE, QueingFirebaseService.KEY_MESSAGE, patient);
            }
        }