Beispiel #1
0
        public async Task Send(MTProtoRequest request)
        {
            // TODO: refactor
            if (needConfirmation.Any())
            {
                var ackRequest = new AckRequest(needConfirmation);
                using (var memory = new MemoryStream())
                    using (var writer = new BinaryWriter(memory))
                    {
                        ackRequest.OnSend(writer);
                        await Send(memory.ToArray(), ackRequest);

                        needConfirmation.Clear();
                    }
            }


            using (var memory = new MemoryStream())
                using (var writer = new BinaryWriter(memory))
                {
                    request.OnSend(writer);
                    await Send(memory.ToArray(), request);
                }

            _session.Save();
        }
Beispiel #2
0
        public async Task Send(TLMethod request, CancellationToken token = default)
        {
            token.ThrowIfCancellationRequested();

            // TODO: refactor
            if (needConfirmation.Any())
            {
                var ackRequest = new AckRequest(needConfirmation);
                using (var memory = new MemoryStream())
                    using (var writer = new BinaryWriter(memory))
                    {
                        ackRequest.SerializeBody(writer);
                        await Send(memory.ToArray(), ackRequest, token).ConfigureAwait(false);

                        needConfirmation.Clear();
                    }
            }


            using (var memory = new MemoryStream())
                using (var writer = new BinaryWriter(memory))
                {
                    request.SerializeBody(writer);
                    await Send(memory.ToArray(), request, token).ConfigureAwait(false);
                }

            session.Save();
        }
Beispiel #3
0
        private Status Check(string hash, string chainid)
        {
            Request = new AckRequest();
            Request.param.Chainid = chainid;
            Request.param.hash    = hash;

            var execute = Run(Request);

            if (!execute)
            {
                return(Status.RequestFailed);
            }

            Status status = Status.Unknown;

            if (!Enum.TryParse(Result?.result?.Entrydata?.Status ?? "null", out status))
            {
                if (!Enum.TryParse(Result?.result?.Commitdata?.Status ?? "null", out status))
                {
                    Enum.TryParse(Result?.result.Status ?? "unknown", out status);
                }
            }

            return(status);
        }
Beispiel #4
0
        public async Task Send(TeleSharp.TL.TLMethod request)
        {
            // TODO: refactor
            if (needConfirmation.Any())
            {
                var ackRequest = new AckRequest(needConfirmation);
                using (var memory = new MemoryStream())
                    using (var writer = new BinaryWriter(memory))
                    {
                        ackRequest.SerializeBody(writer);
                        await Send(memory.ToArray(), ackRequest);

                        needConfirmation.Clear();
                    }
            }


            using (var memory = new MemoryStream())
                using (var writer = new BinaryWriter(memory))
                {
                    request.SerializeBody(writer);
                    await Send(memory.ToArray(), request);
                }

            _session.Save();
        }
Beispiel #5
0
        public async Task Send(TLSchema.TLMethod request)
        {
            // TODO: refactor
            if (needConfirmation.Any())
            {
                var ackRequest = new AckRequest(needConfirmation);
                using (var memory = new MemoryStream())
                    using (var writer = new BinaryWriter(memory))
                    {
                        ackRequest.SerializeBody(writer);
                        await Send(memory.ToArray(), ackRequest);

                        needConfirmation.Clear();
                    }
            }


            using (var memory = new MemoryStream())
                using (var writer = new BinaryWriter(memory))
                {
                    request.SerializeBody(writer);
                    await Send(memory.ToArray(), request);
                }

            _client.RaiseSessionChanged();
        }
Beispiel #6
0
        public async Task Send(TeleSharp.TL.TLMethod request, CancellationToken token = default(CancellationToken))
        {
            token.ThrowIfCancellationRequested();

            // TODO: refactor
            if (this.needConfirmation.Any())
            {
                AckRequest ackRequest = new AckRequest(this.needConfirmation);
                using (MemoryStream memory = new MemoryStream())
                    using (BinaryWriter writer = new BinaryWriter(memory))
                    {
                        ackRequest.SerializeBody(writer);
                        await this.Send(memory.ToArray(), ackRequest, token).ConfigureAwait(false);

                        this.needConfirmation.Clear();
                    }
            }


            using (MemoryStream memory = new MemoryStream())
                using (BinaryWriter writer = new BinaryWriter(memory))
                {
                    request.SerializeBody(writer);
                    await this.Send(memory.ToArray(), request, token).ConfigureAwait(false);
                }

            this.session.Save();
        }
Beispiel #7
0
        private async Task AckRequestAsync(Address destinationAddress, Address indirectEndPoint, Member[] membersList)
        {
            logger.LogDebug("{LocalAddress} sending AckRequest to {destinationAddress} via {indirectEndPoint}", Self.Address, destinationAddress, indirectEndPoint);

            var ackRequest = new AckRequest {
                DestinationAddress = destinationAddress, SourceAddress = Self.Address
            };

            WriteMembers(ackRequest, membersList);

            await transport.SendAsync(indirectEndPoint, ackRequest);
        }
Beispiel #8
0
        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {
            string text = intent.GetStringExtra("ack") ?? "no data";

            if (text != "no data")
            {
                _ack = JsonConvert.DeserializeObject <AckRequest>(text);
                Webservices.SilenceAlarm(_ack);
            }

            StopSelf();
            return(StartCommandResult.NotSticky);
        }
Beispiel #9
0
        public bool Run(AckRequest requestData)
        {
            var reply = Client.MakeRequest <AckRequest>(requestData);

            JsonReply = reply.Content;

            if (reply.StatusCode == System.Net.HttpStatusCode.OK)
            {
                Result = JsonConvert.DeserializeObject <AckResult>(reply.Content);
                return(true);
            }

            return(false);
        }
Beispiel #10
0
        private async Task Ack()
        {
            if (needConfirmation.Any())
            {
                var ackRequest = new AckRequest(needConfirmation);
                using (var memory = new MemoryStream())
                    using (var writer = new BinaryWriter(memory))
                    {
                        ackRequest.SerializeBody(writer);
                        await Send(memory.ToArray(), ackRequest);

                        needConfirmation.Clear();
                    }
            }
        }
Beispiel #11
0
        // TODO(keli.wang): when one ack delay and blocks many other acks, can we just make this one a nack?
        private bool HandleNormalAckRequests(AckHandler handler)
        {
            lock (_updateGuard)
            {
                if (handler != _beginScanPosition)
                {
                    return(false);
                }

                var handlers = ContinuousCompleteHandlers();
                _beginScanPosition = handlers[handlers.Count - 1].Item2.Next;

                if (handlers.Count == 1)
                {
                    if (!AllowSendAck(handlers[0].Item2))
                    {
                        return(false);
                    }
                }

                var requests = new List <AckRequest>(handlers.Count);
                foreach (var segment in handlers)
                {
                    var request = new AckRequest
                    {
                        Subject         = Subject,
                        Group           = Group,
                        IsBroadcast     = _isBroadcast,
                        ConsumerId      = ClientId.CurrentClientId,
                        PullOffsetBegin = segment.Item1.PullLogOffset,
                        PullOffsetEnd   = segment.Item2.PullLogOffset,
                    };
                    requests.Add(request);
                }

                _head = _beginScanPosition;
                // All message is acked, need reset head and tail
                if (_head == null)
                {
                    _tail = null;
                }

                UpdateLastAckTime();
                EnqueueRequests(requests);
                return(true);
            }
        }
Beispiel #12
0
        private bool HandleForceSendAckRequests()
        {
            lock (_updateGuard)
            {
                if (DateTime.Now.ToTime() - _lastAckTime < TryForceSendAckIntervalSeconds * 1000)
                {
                    return(false);
                }

                if (_head == null || !_head.Completed)
                {
                    EnqueueRequests(new List <AckRequest> {
                        CreateEmptyAckRequest()
                    });
                    return(true);
                }

                var handlers = ContinuousCompleteHandlers();
                _beginScanPosition = handlers[handlers.Count - 1].Item2.Next;

                var requests = new List <AckRequest>(handlers.Count);
                foreach (var segment in handlers)
                {
                    var request = new AckRequest
                    {
                        Subject         = Subject,
                        Group           = Group,
                        IsBroadcast     = _isBroadcast,
                        ConsumerId      = ClientId.CurrentClientId,
                        PullOffsetBegin = segment.Item1.PullLogOffset,
                        PullOffsetEnd   = segment.Item2.PullLogOffset,
                    };
                    requests.Add(request);
                }

                _head = _beginScanPosition;
                // All message is acked, need reset head and tail
                if (_head == null)
                {
                    _tail = null;
                }

                UpdateLastAckTime();
                EnqueueRequests(requests);
                return(true);
            }
        }
        public Task <Response> Ack(string brokerGroup, AckRequest request)
        {
            var client = GetBrokerGroupClient(brokerGroup, request.Subject, request.Group);

            if (client == null || !client.Writtable)
            {
                _brokerGroupService.ConsumerGetSubjectCluster(request.Subject, request.Group, true);
                var tsc = new TaskCompletionSource <Response>();
                tsc.SetResult(new Response(-1, Response.Error)
                {
                    Result = new NoWritableBrokerException(
                        $"broker group {brokerGroup} is not writable now, so cannot send ack for {request.Subject}/{request.Group}")
                });
                return(tsc.Task);
            }

            return(client.Send(new Request(request), 3000));
        }
Beispiel #14
0
 private static bool IsEmptyAck(AckRequest request)
 {
     return(request.PullOffsetBegin == -1 && request.PullOffsetEnd == -1);
 }
 public MesssageAckPayloadHolder(AckRequest request)
 {
     this.request = request;
 }
Beispiel #16
0
 public override async Task <AckResponse> ack(AckRequest request, ServerCallContext context)
 {
     return(await _ackDelegate(request));
 }
 public AckResponse Ack(AckRequest request)
 {
     throw new NotImplementedException();
 }
    //protected override void OnError(Context context, string errorId)
    //{
    //    Log.Error(ApplicationSettings.AzureTag, "GCM Error: " + errorId);
    //}

    //  protected override void OnRegistered(Context context, string registrationId)
    //  {
    //PushNotificationImplementation.registerRequest.deviceToken = registrationId;
    //ApplicationSettings.DeviceToken = registrationId;

    ////added on 1/25/17 by aditmer to unregister the device if the registrationId has changed
    //CheckInstallationID.CheckNewInstallationID(registrationId);

    //Webservices.RegisterPush(PushNotificationImplementation.registerRequest);
    ////commented out on 11/29/16 by aditmer so we can register on the server
    //    //RegistrationID = registrationId;

    //    //Hub = new NotificationHub(NightscoutMobileHybrid.Constants.NotificationHubPath, NightscoutMobileHybrid.Constants.ConnectionString, context);

    //    //try
    //    //{
    //    //    Hub.UnregisterAll(registrationId);
    //    //}
    //    //catch (Exception ex)
    //    //{
    //    //    Log.Error(ApplicationSettings.AzureTag, ex.Message);
    //    //}


    //    //var tags = new List<string>() { ApplicationSettings.AzureTag };

    //    //try
    //    //{
    //    //    const string templateBodyGCM = "{\"data\":{\"message\":\"$(message)\",\"eventName\":\"$(eventName)\",\"group\":\"$(group)\",\"key\":\"$(key)\",\"level\":\"$(level)\",\"sound\":\"$(sound)\",\"title\":\"$(title)\"}}";

    //    //    var hubRegistration = Hub.RegisterTemplate(registrationId, "nightscout", templateBodyGCM, tags.ToArray());
    //    //}
    //    //catch (Exception ex)
    //    //{
    //    //    Log.Error(ApplicationSettings.AzureTag, ex.Message);
    //    //}
    //}

    //protected override void OnUnRegistered(Context context, string registrationId)
    //{
    //    createNotification("0", "GCM Unregistered...", "The device has been unregistered!", 0,"0","0");
    //}

    void createNotification(string key, string title, string desc, int sound, string group, string level)
    {
        var intent = new Intent(this, typeof(MainActivity));

        intent.AddFlags(ActivityFlags.SingleTop);
        var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.UpdateCurrent);

        //addd on 12/5/16 by aditmer to add actions to the push notifications

        AckRequest ack = new AckRequest();

        ack.group = group;
        ack.key   = key;
        ack.level = level;
        ack.time  = ApplicationSettings.AlarmUrgentMins1;
        var notificationIntent = new Intent(this, typeof(NotificationActionService));

        notificationIntent.PutExtra("ack", JsonConvert.SerializeObject(ack));
        var snoozeIntent1 = PendingIntent.GetService(this, 0, notificationIntent, PendingIntentFlags.OneShot);

        //adds 2nd action that snoozes the alarm for the ApplicationSettings.AlarmUrgentMins[1] amount of time
        var        notificationIntent2 = new Intent(this, typeof(NotificationActionService));
        AckRequest ack2 = new AckRequest();

        ack2.group = group;
        ack2.key   = key;
        ack2.level = level;
        ack2.time  = ApplicationSettings.AlarmUrgentMins2;
        notificationIntent2.PutExtra("ack", JsonConvert.SerializeObject(ack2));
        var snoozeIntent2 = PendingIntent.GetService(this, 0, notificationIntent2, PendingIntentFlags.OneShot);

        //Notification.Action notificationAction = new Notification.Action(0, "Snooze", snoozeIntent);


        var notificationBuilder = new Notification.Builder(this);

        if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
        {
            notificationBuilder.SetChannelId("nightscout");
        }
        notificationBuilder.SetSmallIcon(NightscoutMobileHybrid.Droid.Resource.Drawable.icon);
        notificationBuilder.SetContentTitle(title);
        notificationBuilder.SetContentText(desc);
        notificationBuilder.SetAutoCancel(true);
        notificationBuilder.SetPriority((int)NotificationPriority.Max);
        notificationBuilder.SetContentIntent(pendingIntent);

        notificationBuilder.AddAction(0, $"Snooze {ack.time} min", snoozeIntent1);
        notificationBuilder.AddAction(0, $"Snooze {ack2.time} min", snoozeIntent2);

        if (sound == 0)
        {
            notificationBuilder.SetDefaults(NotificationDefaults.Vibrate | NotificationDefaults.Lights | NotificationDefaults.Sound);
        }
        else
        {
            notificationBuilder.SetDefaults(NotificationDefaults.Vibrate | NotificationDefaults.Lights);
            notificationBuilder.SetSound(Android.Net.Uri.Parse(ContentResolver.SchemeAndroidResource + "://" + PackageName + "/Raw/" + sound));
        }

        var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);
        var notification        = notificationBuilder.Build();

        if (sound != 0)
        {
            notification.Flags = NotificationFlags.Insistent;
        }
        notificationManager.Notify(key, 1, notification);

        //Not using in-app notifications (Nightscout handles all of that for us)
        //dialogNotify(title, desc);
    }
Beispiel #19
0
        public async override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
        {
            //changed on 8/12/18 by aditmer.  Replaces HockeyApp analytics w/ AppCenter
            Analytics.TrackEvent("iOS Notification Ack");
            Debug.WriteLine("Snooze me");
            Console.WriteLine("Snoozed");
            // Take action based on Action ID

            AckRequest ack = new AckRequest();

            ack.time = -1;

            switch (response.ActionIdentifier)
            {
            case "snooze1":

                ack.time = ApplicationSettings.AlarmUrgentLowMins1;

                break;

            case "snooze2":
                ack.time = ApplicationSettings.AlarmUrgentLowMins2;

                break;

            case "snooze3":
                ack.time = ApplicationSettings.AlarmUrgentMins1;

                break;

            case "snooze4":
                ack.time = ApplicationSettings.AlarmUrgentMins2;

                break;
                // default:
                // Take action based on identifier
                //switch (response.ActionIdentifier)
                //{
                //    case UNActionIdentifier.Default:
                //// Handle default
                //...
                //break;
                //    case UNActionIdentifier.Dismiss:
                // Handle dismiss
                //...
                //break;
                //}
                //break;
            }

            if (ack.time != -1)
            {
                var userInfo = response.Notification.Request.Content.UserInfo;

                if (userInfo.ContainsKey(new NSString("level")))
                {
                    ack.level = userInfo.ValueForKey(new NSString("level")) as NSString;
                    //ack.Level = level.Int32Value;
                }

                if (userInfo.ContainsKey(new NSString("group")))
                {
                    ack.group = (userInfo.ValueForKey(new NSString("group")) as NSString).ToString();
                }

                if (userInfo.ContainsKey(new NSString("key")))
                {
                    ack.key = (userInfo.ValueForKey(new NSString("key")) as NSString).ToString();
                }



                await Webservices.SilenceAlarm(ack);
            }

            // Inform caller it has been handled
            completionHandler();
        }
Beispiel #20
0
        public async Task Send(TeleSharp.TL.TLMethod request)
        {
            // TODO: refactor
            if (needConfirmation.Any())
            {
                var ackRequest = new AckRequest(needConfirmation);
                using (var memory = new MemoryStream())
                    using (var writer = new BinaryWriter(memory))
                    {
                        ackRequest.SerializeBody(writer);
                        await Send(memory.ToArray(), ackRequest);

                        needConfirmation.Clear();
                    }
            }


            //using (var memory = new MemoryStream())
            //using (var writer = new BinaryWriter(memory))
            //{
            //    request.SerializeBody(writer);
            //    await Send(memory.ToArray(), request);
            //}



            TaskCompletionSource <bool> responseSource;

            using (var memory = new MemoryStream())
                using (var writer = new BinaryWriter(memory))
                {
                    //var messageId = _session.GetNewMessageId();
                    //request.MessageId = messageId;

                    //if (request.GetType() == typeof(TeleSharp.TL.TLRequestInvokeWithLayer))
                    //{
                    //    connectMessageID = messageId;
                    //}


                    request.SerializeBody(writer);
                    request.MessageId = _session.GetNewMessageId();

                    Debug.WriteLine($"Send request - {request.MessageId}");
                    responseSource = new TaskCompletionSource <bool>();
                    runningRequests.Add(request.MessageId, Tuple.Create(request, responseSource));

                    await Send(memory.ToArray(), request);

                    Debug.WriteLine("sended");
                }

            await responseSource.Task;

            Debug.WriteLine("complete");
            if (runningRequests.ContainsKey(request.MessageId))
            {
                runningRequests.Remove(request.MessageId);
            }
            Debug.WriteLine("request removed from queue");

            _session.Save();
            Debug.WriteLine("session saved");
        }