Exemplo n.º 1
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            var deferral = taskInstance.GetDeferral();

            var data = Toast.GetData(taskInstance);
            if (data != null)
            {
                if (data.ContainsKey("QuickMessage"))
                {
                    var manualResetEvent = new ManualResetEvent(false);

                    var text = data["QuickMessage"];
                    var messageText = text.Replace("\r\n", "\n").Replace('\v', '\n').Replace('\r', '\n');
                    var entitiesBase = Utils.GetEntities(ref messageText);

                    var replyToMsgId = new int?();
                    var inputPeer = default(TLInputPeerBase);
                    if (data.ContainsKey("from_id"))
                    {
                        inputPeer = new TLInputPeerUser { UserId = int.Parse(data["from_id"]), AccessHash = long.Parse(data["access_hash"]) };
                    }
                    else if (data.ContainsKey("channel_id"))
                    {
                        inputPeer = new TLInputPeerChannel { ChannelId = int.Parse(data["channel_id"]), AccessHash = long.Parse(data["access_hash"]) };
                        replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : new int?();
                    }
                    else if (data.ContainsKey("chat_id"))
                    {
                        inputPeer = new TLInputPeerChat { ChatId = int.Parse(data["chat_id"]) };
                        replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : new int?();
                    }

                    TLVector<TLMessageEntityBase> entities = null;
                    if (entitiesBase != null)
                    {
                        entities = new TLVector<TLMessageEntityBase>(entitiesBase);
                    }

                    var obj = new TLMessagesSendMessage { Peer = inputPeer, ReplyToMsgId = replyToMsgId, Message = messageText, Entities = entities, IsBackground = true, RandomId = TLLong.Random() };

                    ConnectionManager.Instance.UserId = SettingsHelper.UserId;
                    ConnectionManager.Instance.SendRequest(new TLInvokeWithoutUpdates { Query = obj }, (message, ex) =>
                    {
                        manualResetEvent.Set();
                    },
                    () =>
                    {
                        manualResetEvent.Set();
                    },
                    ConnectionManager.DefaultDatacenterId, ConnectionType.Generic, RequestFlag.CanCompress | RequestFlag.FailOnServerError | RequestFlag.RequiresQuickAck | RequestFlag.Immediate);

                    manualResetEvent.WaitOne(15000);
                }
            }

            deferral.Complete();
        }
Exemplo n.º 2
0
 private void SendMessageAsyncInternal(TLMessagesSendMessage message, Action <TLUpdatesBase> callback, Action fastCallback, Action <TLRPCError> faultCallback)
 {
     SendAsyncInternal("messages.sendMessage", Constants.MessageSendingInterval, message, callback, fastCallback, faultCallback);
 }
Exemplo n.º 3
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            var deferral = taskInstance.GetDeferral();

            var data = Toast.GetData(taskInstance);

            if (data != null)
            {
                if (data.ContainsKey("QuickMessage"))
                {
                    var deviceInfoService = new DeviceInfoService();
                    var eventAggregator   = new TelegramEventAggregator();
                    var cacheService      = new InMemoryCacheService(eventAggregator);
                    var updatesService    = new UpdatesService(cacheService, eventAggregator);
                    var transportService  = new TransportService();
                    var connectionService = new ConnectionService(deviceInfoService);
                    var statsService      = new StatsService();
                    var manualResetEvent  = new ManualResetEvent(false);
                    var protoService      = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService, statsService);

                    protoService.Initialized += (s, args) =>
                    {
                        var text         = data["QuickMessage"];
                        var messageText  = text.Replace("\r\n", "\n").Replace('\v', '\n').Replace('\r', '\n');
                        var entitiesBase = Utils.GetEntities(ref messageText);

                        var replyToMsgId = 0;
                        var inputPeer    = default(TLInputPeerBase);
                        if (data.ContainsKey("from_id"))
                        {
                            inputPeer = new TLInputPeerUser {
                                UserId = int.Parse(data["from_id"]), AccessHash = long.Parse(data["access_hash"])
                            };
                        }
                        else if (data.ContainsKey("channel_id"))
                        {
                            inputPeer = new TLInputPeerChannel {
                                ChannelId = int.Parse(data["channel_id"]), AccessHash = long.Parse(data["access_hash"])
                            };
                            replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : 0;
                        }
                        else if (data.ContainsKey("chat_id"))
                        {
                            inputPeer = new TLInputPeerChat {
                                ChatId = int.Parse(data["chat_id"])
                            };
                            replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : 0;
                        }

                        TLVector <TLMessageEntityBase> entities = null;
                        if (entitiesBase != null)
                        {
                            entities = new TLVector <TLMessageEntityBase>(entitiesBase);
                        }

                        var obj = new TLMessagesSendMessage {
                            Peer = inputPeer, ReplyToMsgId = replyToMsgId, Message = messageText, Entities = entities, IsBackground = true, RandomId = TLLong.Random()
                        };

                        protoService.SendInformativeMessageInternal <TLUpdatesBase>("messages.sendMessage", obj, result =>
                        {
                            manualResetEvent.Set();
                        },
                                                                                    faultCallback: fault =>
                        {
                            // TODO: alert user?
                            manualResetEvent.Set();
                        },
                                                                                    fastCallback: () =>
                        {
                            manualResetEvent.Set();
                        });

                        //var date = TLUtils.DateToUniversalTimeTLInt(protoService.ClientTicksDelta, DateTime.Now);
                        //var message = TLUtils.GetMessage(SettingsHelper.UserId, inputPeer, TLMessageState.Sending, true, true, date, text, new TLMessageMediaEmpty(), TLLong.Random(), replyToMsgId);
                        //var history = cacheService.GetHistory(inputPeer, 1);

                        //cacheService.SyncSendingMessage(message, null, async (m) =>
                        //{
                        //    await protoService.SendMessageAsync(message, () =>
                        //    {
                        //        // TODO: fast callback
                        //    });
                        //    manualResetEvent.Set();
                        //});
                    };
                    protoService.InitializationFailed += (s, args) =>
                    {
                        manualResetEvent.Set();
                    };

                    //cacheService.Init();
                    protoService.Initialize();

                    manualResetEvent.WaitOne(15000);
                }
            }

            deferral.Complete();
        }
 private void SendMessageAsyncInternal(TLMessagesSendMessage message, Action <TLUpdatesBase> callback, Action fastCallback, Action <TLRPCError> faultCallback)
 {
     SendAsyncInternal("messages.sendMessage", Constants.MessageSendingInterval, message, callback, fastCallback, faultCallback, RequestFlag.CanCompress | RequestFlag.InvokeAfter | RequestFlag.RequiresQuickAck);
 }