Пример #1
0
        public ActionResult Delete(string ids)
        {
            if (string.IsNullOrEmpty(ids))
            {
                return(Content("请选中要删除的数据!"));
            }
            //正常处理
            string[]   strIds = ids.Split(',');
            List <int> idList = new List <int>();

            foreach (var strId in strIds)
            {
                idList.Add(int.Parse(strId));
            }
            DeviceInfoService.DeleteListByLogical(idList);

            foreach (var id in idList)
            {
                var deviceId = DeviceInfoService.GetEntities(d => d.Id == id).Select(d => d.DeviceId).FirstOrDefault();
                //写操作日志
                OperationLogService.Add("删除设备", "设备管理", LoginInfo, deviceId, "");
            }

            return(Content("ok"));
        }
Пример #2
0
        public async void GetSensoridNew()
        {
            //Exception exc = null;
            string SensorData = "";

            using (DeviceInfoService dis = new DeviceInfoService())
            {
                await dis.Initialize();

                SensorData += "System ID: " + await dis.ReadSystemId();

                SensorData += "Model Nr: " + await dis.ReadModelNumber();

                SensorData += "Serial Nr: " + await dis.ReadSerialNumber();

                SensorData += "Firmware Revision: " + await dis.ReadFirmwareRevision();

                SensorData += "Hardware Revision: " + await dis.ReadHardwareRevision();

                SensorData += "Sofware Revision: " + await dis.ReadSoftwareRevision();

                SensorData += "Manufacturer Name: " + await dis.ReadManufacturerName();

                SensorData += "Cert: " + await dis.ReadCert();

                SensorData += "PNP ID: " + await dis.ReadPnpId();
            }
        }
Пример #3
0
 public Up2019Service(
     DeviceInfoService deviceInfoService,
     IJT808Config jT808Config,
     IJT808TcpClientFactory jT808TcpClientFactory)
 {
     this.jT808TcpClientFactory = jT808TcpClientFactory;
     Serializer        = jT808Config.GetSerializer();
     DeviceInfoService = deviceInfoService;
 }
Пример #4
0
        private void RunAsync(Action callback)
        {
            var deviceInfoService   = new DeviceInfoService(GetInitConnection(), true, "BackgroundDifferenceLoader", _id);
            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 publicConfigService = new MockupPublicConfigService();

            var manualResetEvent = new ManualResetEvent(false);
            var mtProtoService   = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService, publicConfigService);

            mtProtoService.Initialized += (o, e) =>
            {
                var lastTime = TLUtils.OpenObjectFromMTProtoFile <TLInt>(_differenceTimeSyncRoot, Constants.DifferenceTimeFileName);
                if (lastTime != null)
                {
                    var now = TLUtils.DateToUniversalTimeTLInt(mtProtoService.ClientTicksDelta, DateTime.Now);

                    if (lastTime.Value + Constants.DifferenceMinInterval > now.Value)
                    {
                        manualResetEvent.Set();
                        return;
                    }
                }

                var clientState = TLUtils.OpenObjectFromMTProtoFile <TLState>(_stateRoot, Constants.StateFileName);
                _results = TLUtils.OpenObjectFromMTProtoFile <TLVector <TLDifference> >(_differenceFileSyncRoot, Constants.DifferenceFileName) ?? new TLVector <TLDifference>();
                var state = GetState(clientState, _results);

                if (state != null)
                {
                    GetDifferenceAsync(mtProtoService, state, () => manualResetEvent.Set());
                }
                else
                {
                    manualResetEvent.Set();
                }
            };
            mtProtoService.InitializationFailed += (o, e) =>
            {
                manualResetEvent.Set();
            };
            mtProtoService.Initialize();

#if DEBUG
            manualResetEvent.WaitOne(15000);
#else
            manualResetEvent.WaitOne(15000);
#endif

            callback.SafeInvoke();
        }
Пример #5
0
        private TelegramClient GetTelegramClient()
        {
            Contract.Ensures(Contract.Result <TelegramClient>() != default(TelegramClient));

            try
            {
                FileSessionStore store = new FileSessionStore {
                    SessionUserId = ConfigurationManager.PhoneNumber
                };
                IDeviceInfoService device = new DeviceInfoService("PC", "Win 10.0", "1.0.0", "ru");
                return(new TelegramClient(ConfigurationManager.ApiId, ConfigurationManager.ApiHash, ConfigurationManager.ServerHost, ConfigurationManager.ServerPort, device, store));
            }
            catch (Exception ex)
            {
                _logger.Error($"For connecting to telegram server use a VPN", ex);
                throw;
            }
        }
Пример #6
0
        public async Task <string> GetSensorid()
        {
            Exception exc        = null;
            string    SensorData = "";

            try
            {
                using (DeviceInfoService dis = new DeviceInfoService())
                {
                    await dis.Initialize();

                    SensorData += "System ID: " + await dis.ReadSystemId();

                    SensorData += "Model Nr: " + await dis.ReadModelNumber();

                    SensorData += "Serial Nr: " + await dis.ReadSerialNumber();

                    SensorData += "Firmware Revision: " + await dis.ReadFirmwareRevision();

                    SensorData += "Hardware Revision: " + await dis.ReadHardwareRevision();

                    SensorData += "Sofware Revision: " + await dis.ReadSoftwareRevision();

                    SensorData += "Manufacturer Name: " + await dis.ReadManufacturerName();

                    SensorData += "Cert: " + await dis.ReadCert();

                    SensorData += "PNP ID: " + await dis.ReadPnpId();
                }

                return(SensorData);
            }
            catch (Exception ex)
            {
                exc = ex;
            }

            if (exc != null)
            {
                SensorData += exc.Message;
            }

            return(SensorData);
        }
Пример #7
0
        private async void btnGetSysid_Click(object sender, RoutedEventArgs e)
        {
            Exception exc = null;

            try
            {
                using (DeviceInfoService dis = new DeviceInfoService())
                {
                    await dis.Initialize();

                    tbSystemId.Text = "System ID: " + await dis.ReadSystemId();

                    tbModelNr.Text = "Model Nr: " + await dis.ReadModelNumber();

                    tbSerielNr.Text = "Serial Nr: " + await dis.ReadSerialNumber();

                    tbFWRev.Text = "Firmware Revision: " + await dis.ReadFirmwareRevision();

                    tbHWRev.Text = "Hardware Revision: " + await dis.ReadHardwareRevision();

                    tbSWRev.Text = "Sofware Revision: " + await dis.ReadSoftwareRevision();

                    tbManufacturerName.Text = "Manufacturer Name: " + await dis.ReadManufacturerName();

                    tbCert.Text = "Cert: " + await dis.ReadCert();

                    tbPNP.Text = "PNP ID: " + await dis.ReadPnpId();
                }
            }
            catch (Exception ex)
            {
                exc = ex;
            }

            if (exc != null)
            {
                await new MessageDialog(exc.Message).ShowAsync();
            }
        }
Пример #8
0
        // GET: Device

        /// <summary>
        /// 添加设备信息
        /// </summary>
        /// <param name="deviceInfo"></param>
        /// <returns></returns>
        public ActionResult Add(DeviceInfo deviceInfo)
        {
            var deviceId = DeviceInfoService.GetEntities(u => (u.DeviceId == deviceInfo.DeviceId && u.IsDeleted == false)).FirstOrDefault();

            if (deviceId == null)
            {
                deviceInfo.SubTime = DateTime.Now;
                int id = DeviceInfoService.Add(deviceInfo).Id;
                DeviceParameterInfo deviceParameterInfo = new DeviceParameterInfo
                {
                    DeviceInfoId = id,
                    StatusFlag   = Glove.IOT.Model.Enum.StatusFlagEnum.未连接.ToString(),
                    SubTime      = DateTime.Now,
                };
                DeviceParameterInfoService.Add(deviceParameterInfo);
                //写操作日志
                OperationLogService.Add("添加设备", "设备管理", LoginInfo, deviceInfo.DeviceId, "");
                return(Content("Ok"));
            }
            else
            {
                return(Content("fail"));
            }
        }
Пример #9
0
        /// <summary>
        /// 获取所有设备信息
        /// </summary>
        /// <returns></returns>
        public ActionResult GetAllDeviceInfos(string limit, string page, string schDeviceId, string schStatusFlag)
        {
            int pageSize  = int.Parse(limit ?? "10");
            int pageIndex = int.Parse(page ?? "1");

            //过滤的设备名 过滤备注schDeviceId schStatusFlag
            var queryParam = new DeviceQueryParam()
            {
                PageSize      = pageSize,
                PageIndex     = pageIndex,
                SchDeviceId   = schDeviceId,
                SchStatusFlag = schStatusFlag,
                Total         = 0
            };
            var pageData = DeviceInfoService.LoagDevicePageData(queryParam).ToList();
            var data     = new { code = 0, msg = "", count = queryParam.Total, data = pageData.ToList() };

            if (!string.IsNullOrEmpty(schDeviceId) || !string.IsNullOrEmpty(schStatusFlag))
            {
                //写操作日志
                OperationLogService.Add("查找设备", "设备管理", LoginInfo, schDeviceId, schStatusFlag);
            }
            return(Json(data, JsonRequestBehavior.AllowGet));
        }
Пример #10
0
        private async void StartApp()
        {
            Exception exc = null;

            try
            {
                using (DeviceInfoService dis = new DeviceInfoService())
                {
                    await dis.Initialize();

                    //await new MessageDialog("Device Connected").ShowAsync();
                    serialNumber.Text = "ID: " + await dis.ReadSystemId();

                    modelNumber.Text = await dis.ReadModelNumber();

                    // serialNumber.Text = await dis.ReadSerialNumber();
                    //tbFWRev.Text = "Firmware Revision: " + await dis.ReadFirmwareRevision();
                    //tbHWRev.Text = "Hardware Revision: " + await dis.ReadHardwareRevision();
                    //tbSWRev.Text = "Sofware Revision: " + await dis.ReadSoftwareRevision();
                    //tbManufacturerName.Text = "Manufacturer Name: " + await dis.ReadManufacturerName();
                    //tbCert.Text = "Cert: " + await dis.ReadCert();
                    //tbPNP.Text = "PNP ID: " + await dis.ReadPnpId();
                    InitializeDevice();
                }
            }
            catch (Exception ex)
            {
                exc = ex;
                await new MessageDialog(exc.Message).ShowAsync();
            }

            if (exc != null)
            {
                await new MessageDialog(exc.Message).ShowAsync();
            }
        }
        private void UpdateNotifySettings(TLInputPeerBase inputPeer, TLInt muteUntil)
        {
            var deviceInfoService   = new DeviceInfoService(GetInitConnection(), true, "InteractiveNotificationsBackgroundTask", _id);
            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 publicConfigService = new MockupPublicConfigService();

            var manualResetEvent = new ManualResetEvent(false);

            Log("before init");
            var mtProtoService = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService, publicConfigService);

            mtProtoService.Initialized += (o, e) =>
            {
                Log("init completed");

                mtProtoService.GetNotifySettingsAsync(new TLInputNotifyPeer {
                    Peer = inputPeer
                },
                                                      result =>
                {
                    Log("getNotifySettings completed", () =>
                    {
                        var peerNotifySettings = result as TLPeerNotifySettings;
                        if (peerNotifySettings != null)
                        {
                            if (muteUntil.Value < int.MaxValue)
                            {
                                muteUntil = TLUtils.DateToUniversalTimeTLInt(mtProtoService.ClientTicksDelta, DateTime.Now.AddSeconds(muteUntil.Value));
                            }

                            var inputPeerNotifySettings = new TLInputPeerNotifySettings78
                            {
                                Flags     = new TLInt(0),
                                MuteUntil = muteUntil,
                                Sound     = peerNotifySettings.Sound,
                            };

                            mtProtoService.UpdateNotifySettingsAsync(new TLInputNotifyPeer {
                                Peer = inputPeer
                            },
                                                                     inputPeerNotifySettings,
                                                                     result2 =>
                            {
                                Log("setNotifySettings completed", () =>
                                {
                                    manualResetEvent.Set();
                                });
                            },
                                                                     error2 =>
                            {
                                Log(string.Format("setNotifySettings error={0}\n{1}", error2, error2.Exception),
                                    async() =>
                                {
                                    await Task.Delay(TimeSpan.FromSeconds(1.0));
                                    manualResetEvent.Set();
                                });
                            });
                        }
                        else
                        {
                            manualResetEvent.Set();
                        }
                    });
                },
                                                      error =>
                {
                    Log(string.Format("getNotifySettings error={0}\n{1}", error, error.Exception),
                        async() =>
                    {
                        await Task.Delay(TimeSpan.FromSeconds(1.0));
                        manualResetEvent.Set();
                    });
                });
            };
            mtProtoService.InitializationFailed += (o, e) =>
            {
                Log("init failed");

                manualResetEvent.Set();
            };
            mtProtoService.Initialize();
#if DEBUG
            manualResetEvent.WaitOne();
#else
            manualResetEvent.WaitOne(15000);
#endif
        }
Пример #12
0
 public Ds4WebSocketHandler(EmulatorService emulatorService, DeviceInfoService deviceInfoService)
 {
     this.emulatorService   = emulatorService;
     this.deviceInfoService = deviceInfoService;
 }
 private void BindingDev(List <DevInfo> devInfoList)
 {
     //DeviceInfoService service = new DeviceInfoService();
     ////service.BindingDevPos(devInfoList, db.DevPos.ToList());
     DeviceInfoService.BindingDevParent(devInfoList, db.Areas.ToList().ToTModel());
 }
Пример #14
0
 /// <summary>
 /// 修改设备信息
 /// </summary>
 /// <param name="deviceInfo"></param>
 /// <returns></returns>
 public ActionResult Edit(DeviceInfo deviceInfo)
 {
     deviceInfo.SubTime = DateTime.Now;
     DeviceInfoService.Update(deviceInfo);
     return(Content("ok"));
 }
        private void SendReply(TLInputPeerBase inputPeer, TLString message, TLInt msgId)
        {
            if (msgId == null)
            {
                return;
            }
            if (TLString.IsNullOrEmpty(message))
            {
                return;
            }

            var actionInfo = TLUtils.OpenObjectFromMTProtoFile <TLVector <TLActionInfo> >(_actionInfoSyncRoot, Constants.ActionQueueFileName) ?? new TLVector <TLActionInfo>();

            var count = actionInfo.Count;

            Log("send count=" + count);

            var peerChannel = inputPeer as TLInputPeerChannel;
            var readHistory = peerChannel != null
                ? (TLObject) new TLReadChannelHistory {
                Channel = new TLInputChannel {
                    ChannelId = peerChannel.ChatId, AccessHash = peerChannel.AccessHash
                }, MaxId = msgId
            }
                : new TLReadHistory {
                Peer = inputPeer, MaxId = msgId
            };

            var readHistoryActionInfo = new TLActionInfo();

            readHistoryActionInfo.SendBefore = new TLInt(0);
            readHistoryActionInfo.Action     = readHistory;

            actionInfo.Add(readHistoryActionInfo);

            var sendMessage = new TLSendMessage();

            sendMessage.Flags    = new TLInt(0);
            sendMessage.Peer     = inputPeer;
            sendMessage.Message  = message;
            sendMessage.RandomId = TLLong.Random();

            var sendMessageActionInfo = new TLActionInfo();

            sendMessageActionInfo.SendBefore = new TLInt(0);
            sendMessageActionInfo.Action     = sendMessage;

            actionInfo.Add(sendMessageActionInfo);

            TLUtils.SaveObjectToMTProtoFile(new object(), Constants.ActionQueueFileName, actionInfo);

            if (actionInfo.Count > 0)
            {
                var deviceInfoService   = new DeviceInfoService(GetInitConnection(), true, "InteractiveNotificationsBackgroundTask", _id);
                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 publicConfigService = new MockupPublicConfigService();

                var manualResetEvent = new ManualResetEvent(false);
                Log("before init");
                var requestsToRemove = new List <TLObject>();
                var mtProtoService   = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService, publicConfigService);
                mtProtoService.Initialized += async(o, e) =>
                {
                    Log("init completed");

                    var actionsString = new StringBuilder();
                    foreach (var info in actionInfo)
                    {
                        actionsString.AppendLine(info.ToString());
                    }
                    Log(actionsString.ToString());

                    var       sendMessageActions = new List <TLObject>();
                    const int maxActionCount     = 10;
                    var       currentCount       = 0;
                    foreach (var ai in actionInfo)
                    {
                        if (TLUtils.IsValidAction(ai.Action) && currentCount < maxActionCount)
                        {
                            currentCount++;
                            sendMessageActions.Add(ai.Action);
                        }
                    }

                    if (sendMessageActions.Count > 0)
                    {
                        mtProtoService.SendActionsAsync(sendMessageActions,
                                                        (request, result) => // will be invoked for each sent action
                        {
                            requestsToRemove.Add(request);
                            var sendingMessages = mtProtoService.SendingMessages;
                            Log("send completed count=" + sendingMessages, () =>
                            {
                                if (sendingMessages == 0)
                                {
                                    _clearActionInfoFile = true;

                                    manualResetEvent.Set();
                                }
                            });
                        },
                                                        error =>
                        {
                            Log(string.Format("send error={0}\n{1}", error, error.Exception),
                                async() =>
                            {
                                await Task.Delay(TimeSpan.FromSeconds(1.0));
                                manualResetEvent.Set();
                            });
                        });
                    }
                    else
                    {
                        manualResetEvent.Set();
                    }
                };
                mtProtoService.InitializationFailed += (o, e) =>
                {
                    Log("init failed");

                    manualResetEvent.Set();
                };
                mtProtoService.Initialize();
#if DEBUG
                manualResetEvent.WaitOne();
#else
                manualResetEvent.WaitOne(15000);
#endif
                if (_clearActionInfoFile)
                {
                    Log("clear");
                    lock (_actionInfoSyncRoot)
                    {
                        var actions = actionInfo;

                        foreach (var o in requestsToRemove)
                        {
                            MTProtoService.RemoveActionInfoCommon(actions, o);
                        }

                        TLUtils.SaveObjectToMTProtoFile(_actionInfoSyncRoot, Constants.ActionQueueFileName, actions);
                    }
                }
            }
        }
Пример #16
0
        protected override void Request(FormRequest e)
        {
            switch (e.Title)
            {
            case RISConfigItemNames.UserList:
            {
                var list = new List <IUser_User_LXUE>(UserService.GetUserList());
                list.Insert(0, new User_User_LXUE()
                    {
                        UserCode = string.Empty, UserName = string.Empty
                    });
                this.Response(e.Title, list);
            }
            break;

            case RISConfigItemNames.SimpleModeValue:
                this.SimpleModeValue = "true".Equals(RISConfigService.GetIsSimpleMode(this.SimpleModeKey));
                this.Response(e.Title, this.SimpleModeValue);
                break;

            case RISConfigItemNames.SimpleModeRecords:
                ReloadModeRecords();
                break;

            case RISConfigItemNames.SelectedPKID:
                this.Response(e.Title, this.GetFieldValue(e.Title));
                break;



            //模式保存
            case RISConfigItemNames.SaveSimpleMode:
                this.SaveSimpleMode();
                ReloadModeRecords();
                break;

            //删除
            case RISConfigItemNames.DeleteSimpleMode:
                this.DeleteMode(this.SelectedPKID);
                ReloadModeRecords();
                this.SimpleModeKey = null;
                break;

            case RISConfigItemNames.ExamLockValidTimeSpan:
                this.ExamLockValidTimeSpan = RISConfigService.GetExamLockValidTimeSpan();
                this.Response(e.Title, this.ExamLockValidTimeSpan);
                break;

            case RISConfigItemNames.FromPrintedToRejectedValidTimeSpan:
                this.FromPrintedToRejectedValidTimeSpan = RISConfigService.GetFromPrintedToRejectedValidTimeSpan();
                this.Response(e.Title, this.FromPrintedToRejectedValidTimeSpan);
                break;

            case RISConfigItemNames.OnDutyTimeBegin:
                this.OnDutyTimeBegin = RISConfigService.GetOnDutyTimeBegin();
                this.Response(e.Title, this.OnDutyTimeBegin);
                break;

            case RISConfigItemNames.OnDutyTimeEnd:
                this.OnDutyTimeEnd = RISConfigService.GetOnDutyTimeEnd();
                this.Response(e.Title, this.OnDutyTimeEnd);
                break;

            case RISConfigItemNames.OnDutyReviewUserCode:
                this.OnDutyReviewUserCode = RISConfigService.GetOnDutyReviewUserCode();
                this.Response(e.Title, this.OnDutyReviewUserCode);
                break;

            case RISConfigItemNames.PACSGatewayImplementList:
                this.Response(e.Title, this.m_PACSGatewayIniCls.OptionItems);
                break;

            case RISConfigItemNames.HISGatewayImplementList:
                this.Response(e.Title, this.m_HISGatewayIniCls.OptionItems);
                break;

            case RISConfigItemNames.PatientIDGeneratorImplementList:
                this.Response(e.Title, this.m_PatientIDGeneratorIniCls.OptionItems);
                break;

            case RISConfigItemNames.AccessionNOGeneratorImplementList:
                this.Response(e.Title, this.m_AccessionNOGeneratorIniCls.OptionItems);
                break;

            case RISConfigItemNames.DataPrinterImplementList:
                this.Response(e.Title, this.m_DataPrinterIniCls.OptionItems);
                break;

            case RISConfigItemNames.PACSGatewayImplement:
                this.PACSGatewayImplement = RISConfigService.GetPACSGatewayImplement();
                this.Response(e.Title, this.PACSGatewayImplement);
                break;

            case RISConfigItemNames.HISGatewayImplement:
                this.HISGatewayImplement = RISConfigService.GetHISGatewayImplement();
                this.Response(e.Title, this.HISGatewayImplement);
                break;

            case RISConfigItemNames.PatientIDGeneratorImplement:
                this.PatientIDGeneratorImplement = RISConfigService.GetPatientIDGeneratorImplement();
                this.Response(e.Title, this.PatientIDGeneratorImplement);
                break;

            case RISConfigItemNames.AccessionNOGeneratorImplement:
                this.AccessionNOGeneratorImplement = RISConfigService.GetAccessionNOGeneratorImplement();
                this.Response(e.Title, this.AccessionNOGeneratorImplement);
                break;

            case RISConfigItemNames.DataPrinterImplement:
                this.DataPrinterImplement = RISConfigService.GetDataPrinterImplement();
                this.Response(e.Title, this.DataPrinterImplement);
                break;

            case RISConfigItemNames.PACSGatewayUrl:
                this.PACSGatewayUrl = PACSGatewayConfig.Instance.PACSGatewayUrl;
                this.Response(e.Title, this.PACSGatewayUrl);
                break;

            case RISConfigItemNames.SaveRISConfig:
                this.SaveRISConfig();
                break;

            case RISConfigItemNames.AETitleListByWorkStation:
                this.Response(e.Title, DeviceInfoService.GetDeviceInfoList(DeviceType.WorkStation));
                break;

            case RISConfigItemNames.AETitleByWorkStation:
                this.AETitleByWorkStation = DcmServiceConfig.Instance.StorageSCUAETitle;
                this.Response(e.Title, this.AETitleByWorkStation);
                break;

            case RISConfigItemNames.SaveDcmConfig:
                this.SaveDcmConfig();
                break;
            }
        }
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            Telegram.Logs.Log.WriteSync = true;

            taskInstance.Canceled += OnTaskCanceled;
            var deferral = taskInstance.GetDeferral();

            var stopwatch = Stopwatch.StartNew();
            var task      = taskInstance.Task;
            var name      = task != null ? task.Name : null;

            Log("start " + name);
            if (!_appOpenMutex.WaitOne(0))
            {
                Log("cancel", deferral.Complete);

                return;
            }
            _appOpenMutex.ReleaseMutex();
            Log("release mutex");
            var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);

            if (!isAuthorized)
            {
                Log("cancel isAuthorized=false", deferral.Complete);

                return;
            }
            Log("isAuthorized=true");

            var deviceInfoService = new DeviceInfoService(GetInitConnection(), true, "MessageSchedulerBackgroundTask", _id);
            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 manualResetEvent = new ManualResetEvent(false);

            Log("before init");
            var requestsToRemove = new List <TLObject>();
            var mtProtoService   = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService);

            mtProtoService.Initialized += async(o, e) =>
            {
                Log("init completed");

                var actionInfos = mtProtoService.GetActionInfoFromFile();
                var count       = actionInfos != null ? actionInfos.Count : 0;
                Log("send count=" + count);

                if (actionInfos != null &&
                    actionInfos.Count > 0)
                {
                    var actionsString = new StringBuilder();
                    foreach (var info in actionInfos)
                    {
                        actionsString.AppendLine(info.ToString());
                    }
                    Log(actionsString.ToString());

                    var       sendMessageActions = new List <TLObject>();
                    const int maxActionCount     = 10;
                    var       currentCount       = 0;
                    foreach (var actionInfo in actionInfos)
                    {
                        if (TLUtils.IsValidAction(actionInfo.Action) && currentCount < maxActionCount)
                        {
                            currentCount++;
                            sendMessageActions.Add(actionInfo.Action);
                        }
                    }

                    if (sendMessageActions.Count > 0)
                    {
                        await Task.Delay(TimeSpan.FromSeconds(3.0));

                        mtProtoService.SendActionsAsync(sendMessageActions,
                                                        (request, result) => // will be invoked for each sent action
                        {
                            requestsToRemove.Add(request);
                            var sendingMessages = mtProtoService.SendingMessages;
                            Log("send completed count=" + sendingMessages, () =>
                            {
                                if (sendingMessages == 0)
                                {
                                    _clearActionInfoFile = true;

                                    manualResetEvent.Set();
                                }
                            });
                        },
                                                        error =>
                        {
                            Log(string.Format("send error={0}\n{1}", error, error.Exception),
                                async() =>
                            {
                                await Task.Delay(TimeSpan.FromSeconds(1.0));
                                manualResetEvent.Set();
                            });
                        });
                    }
                    else
                    {
                        manualResetEvent.Set();
                    }
                }
                else
                {
                    manualResetEvent.Set();
                }
            };
            mtProtoService.InitializationFailed += (o, e) =>
            {
                Log("init failed");

                manualResetEvent.Set();
            };
            mtProtoService.Initialize();
#if DEBUG
            manualResetEvent.WaitOne();
#else
            manualResetEvent.WaitOne(15000);
#endif
            if (_clearActionInfoFile)
            {
                Log("clear");
                mtProtoService.RemoveActionInfoFromFile(requestsToRemove);
            }

            Log("stop " + stopwatch.Elapsed, deferral.Complete);
        }