Пример #1
0
        private void Mainform_Shown(object sender, EventArgs e)
        {
            if (!PersistentState.Setup)
            {
                SetupForm    setupForm = new SetupForm();
                DialogResult result    = setupForm.ShowDialog(this);

                if (result != DialogResult.OK)
                {
                    Application.Exit();
                    return;
                }

                PersistentState.Initialize(setupForm.Id, setupForm.Key, setupForm.BulkData);
            }

            _loader = new DynamoDbLoader();
            _loader.StatusChanged += OtherThreadNotificationHandler;

            _downloader = new DownloaderWorker();
            _downloader.StatusChanged += OtherThreadNotificationHandler;

            _mainThreadDelegate = MainThreadAction;

            //lstCrashes.View = View.Details;

            foreach (CrashReport crashReport in PersistentState.Database.GetAllCrashes())
            {
                _lstCrashReports.Add(crashReport);
            }

            _lstCrashReports.Sort(new CrashReportTimeStampFilter());

            _bldCrashReports = new ObservableCollectionDisplay <CrashReport>(_lstCrashReports, c => new CrashReportView(c, _downloader))
            {
                Anchor   = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left,
                Location = new Point(12, 69),
                Size     = new Size(863, 277),
            };

            tabReports.Controls.Add(_bldCrashReports);

            string automation = PersistentState.Database.GetKey("autodownload_automation");

            if (automation != null)
            {
                cboAutomation.SelectedIndex = int.Parse(automation);
            }

            UpdateDBDependantControls();
        }
Пример #2
0
 private void AddItemsToPresentedCollection(IList newItems)
 {
     foreach (var newItem in newItems)
     {
         _presentedItemsSource.Add((TViewModel)newItem);
     }
 }
Пример #3
0
        public void CoverTargetListUpdate()
        {
            if (coverTargetCollection != null && coverTargetCollection?.Count != 0)
            {
                foreach (var pm in coverTargetCollection?.Where(x => !x.AllyIsValid()))
                {
                    Logger.BeatrixLog("{0} is no longer a valid target. Removing them from the Cover Target List.", pm.SafeName());
                    coverTargetCollection?.Remove(pm);
                }
            }

            foreach (var pm in PartyManager.VisibleMembers.Select(x => x.GameObject as BattleCharacter).Where(x => x != null &&
                                                                                                              x.AllyIsValid() &&
                                                                                                              !x.IsMe))
            {
                if (coverTargetCollection != null)
                {
                    if (!coverTargetCollection.Contains(pm))
                    {
                        Logger.BeatrixLog("Adding {0} to the Cover Target List.", pm.SafeName());
                    }
                    if (!coverTargetCollection.Contains(pm))
                    {
                        coverTargetCollection?.Add(pm);
                    }
                }
            }
        }
Пример #4
0
        private void Assets_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var asset = SelectedAsset;

            _model.UnderlyingAsset = asset;

            _model.Clear();
            _options.Clear();

            var options = asset.GetDerivatives(Connector);

            // TODO remove
            options = Connector.Securities.Where(s => s.Type == SecurityTypes.Option && s.Id.StartsWith("RI") && s.ExpiryDate > DateTime.Today);

            foreach (var security in options)
            {
                // TODO remove
                security.UnderlyingSecurityId = asset.Id;

                _model.Add(security);
                _options.Add(security);
            }

            ProcessPositions();
        }
Пример #5
0
        private void Check_Click(object sender, RoutedEventArgs e)
        {
            var terminal = this.SelectedTerminal;

            if (terminal.SystemProcess.MainModule == null)
            {
                throw new InvalidOperationException("Неподходящий процесс для обработки.");
            }

            this.OkResult.SetVisibility(false);

            _settingErrors.Clear();

            var trader = new QuikTrader(terminal.SystemProcess.MainModule.FileName);

            trader.Connected += () => this.GuiAsync(() =>
            {
                if (this.CheckDde.IsChecked == true)
                {
                    trader.StartExport();
                }

                OnConnect(trader, null);
            });

            trader.ConnectionError += error => this.GuiSync(() => OnConnect(trader, error));

            if (this.CheckDde.IsChecked == true)
            {
                trader.ProcessDataError += error => _settingErrors.Add(new SettingsError("Экспорт DDE. {0}".Put(error.Message), true));
            }

            trader.Connect();
        }
Пример #6
0
        public void NaturesMinneTargetListUpdate()
        {
            if (naturesMinneTargetCollection != null && naturesMinneTargetCollection?.Count != 0)
            {
                foreach (var pm in naturesMinneTargetCollection?.Where(x => !x.AllyIsValid()))
                {
                    Logger.EdwardLog("{0} is no longer a valid target. Removing them from the NaturesMinne Target List.", pm.SafeName());
                    naturesMinneTargetCollection?.Remove(pm);
                }
            }

            foreach (var pm in PartyManager.VisibleMembers.Select(x => x.GameObject as BattleCharacter).Where(x => x != null &&
                                                                                                              x.AllyIsValid() &&
                                                                                                              x.Type == GameObjectType.Pc &&
                                                                                                              !x.IsMe))
            {
                if (naturesMinneTargetCollection != null)
                {
                    if (!naturesMinneTargetCollection.Contains(pm))
                    {
                        Logger.EdwardLog("Adding {0} to the NaturesMinne Target List.", pm.SafeName());
                    }
                    if (!naturesMinneTargetCollection.Contains(pm))
                    {
                        naturesMinneTargetCollection?.Add(pm);
                    }
                }
            }
        }
Пример #7
0
        public void SmokeScreenTargetListUpdate()
        {
            if (smokeScreenTargetCollection != null && smokeScreenTargetCollection?.Count != 0)
            {
                foreach (var pm in smokeScreenTargetCollection?.Where(x => !x.AllyIsValid()))
                {
                    Logger.ShadowLog("{0} is no longer a valid target. Removing them from the SmokeScreen Target List.", pm.SafeName());
                    smokeScreenTargetCollection?.Remove(pm);
                }
            }

            foreach (var pm in PartyManager.VisibleMembers.Select(x => x.GameObject as BattleCharacter).Where(x => x != null &&
                                                                                                              x.AllyIsValid() &&
                                                                                                              x.Type == GameObjectType.Pc &&
                                                                                                              x.IsTank() &&
                                                                                                              !x.IsMe))
            {
                if (smokeScreenTargetCollection != null)
                {
                    if (!smokeScreenTargetCollection.Contains(pm))
                    {
                        Logger.ShadowLog("Adding {0} to the SmokeScreen Target List.", pm.SafeName());
                    }
                    if (!smokeScreenTargetCollection.Contains(pm))
                    {
                        smokeScreenTargetCollection?.Add(pm);
                    }
                }
            }
        }
Пример #8
0
        public static ThreadSafeObservableCollection <TChild> CopyToChild <T, TChild>(this ThreadSafeObservableCollection <T> Enum) where TChild : class, new()
        {
            T      _t      = (T)Activator.CreateInstance(typeof(T));
            TChild _tChild = (TChild)Activator.CreateInstance(typeof(TChild));

            PropertyInfo[] selfPropertys  = _t.GetType().GetProperties();
            PropertyInfo[] childPropertys = _tChild.GetType().GetProperties();
            ThreadSafeObservableCollection <TChild> ChildEnum = new ThreadSafeObservableCollection <TChild>();

            foreach (T selfItem in Enum)
            {
                TChild childItem = new TChild();
                foreach (var property in selfPropertys)
                {
                    foreach (var childProperty in childPropertys)
                    {
                        if (property.Name == childProperty.Name)
                        {
                            property.SetValue(childItem, property.GetValue(selfItem, null), null);
                        }
                    }
                }
                ChildEnum.Add(childItem);
            }
            return(ChildEnum);
        }
Пример #9
0
 public void addTuioCursor(TuioCursor tcur)
 {
     Console.WriteLine("add cur " + tcur.CursorID + " (" + tcur.SessionID + ") " + tcur.X + " " + tcur.Y);
     if (cursors.FirstOrDefault <TuioCursor>(tmp => tmp.CursorID == tcur.CursorID) == null)
     {
         cursors.Add(tcur);
     }
 }
Пример #10
0
 public MainViewModel()
 {
     Posts         = new ThreadSafeObservableCollection <Post>();
     Notifications = new ThreadSafeObservableCollection <Notification>();
     Circles       = new ThreadSafeObservableCollection <KeyValuePair <string, string> >();
     Circles.Add(new KeyValuePair <string, string>("Main", "1"));
     InYourCircles = new ThreadSafeObservableCollection <KeyValuePair <string, string> >();
 }
Пример #11
0
            public void Test_PCB_CollectionChanged()
            {
                var collectionChanged = false;
                var sut = new ThreadSafeObservableCollection<TestPCB>();
                sut.CollectionChanged += (s, e) => collectionChanged = sut_CollectionChanged(e);
                var item = new TestPCB();

                sut.Add(item);

                Assert.IsTrue(collectionChanged);
            }
 public static void Sort <TSource, TKey>(this ThreadSafeObservableCollection <TSource> source, Func <TSource, TKey> keySelector, bool isAZ)
 {
     if (isAZ)
     {
         List <TSource> sortedList = source.OrderBy(keySelector).ToList();
         source.Clear();
         foreach (var sortedItem in sortedList)
         {
             source.Add(sortedItem);
         }
     }
     else
     {
         List <TSource> sortedList = source.OrderByDescending(keySelector).ToList();
         source.Clear();
         foreach (var sortedItem in sortedList)
         {
             source.Add(sortedItem);
         }
     }
 }
Пример #13
0
        /// <summary>
        /// Load Installed Packages into Datagrid
        /// </summary>
        /// <param name="progress"></param>
        private void LoadInstalledList(IProgress <int> progress, IEnumerable <HWGPackageModel> list)
        {
            var installedList    = new ThreadSafeObservableCollection <HWGInstalledPackageModel>();
            var installedAppList = GetInstalledAppList();

            if (installedAppList == null)
            {
                RunOnMainThread(() =>
                {
                    CreateInfoBarWithAction("Update Winget-Cli", "your Winget-cli is not supported please Update your winget-cli to version 1.0 or higher.", panelInstalled, Severity.Error, "Update", () =>
                    {
                        StartProcess(Consts.WingetRepository);
                    });
                });
                return;
            }
            var allPackages      = list;
            var allPackagesCount = allPackages.Count();
            int currentItemIndex = 0;

            foreach (var package in allPackages)
            {
                currentItemIndex += 1;
                progress.Report((currentItemIndex * 100 / allPackagesCount));
                foreach (var installedItem in installedAppList)
                {
                    var installedApp = ParseInstalledApp(installedItem, package.PackageId);
                    if (installedApp.packageId != null && installedApp.version != null)
                    {
                        if (package.PackageId.Equals(installedApp.packageId, StringComparison.OrdinalIgnoreCase))
                        {
                            installedList.Add(new HWGInstalledPackageModel
                            {
                                Name             = package.Name,
                                PackageId        = package.PackageId,
                                Publisher        = package.Publisher,
                                ProductCode      = package.ProductCode,
                                YamlUri          = package.YamlUri,
                                Version          = installedApp.version,
                                AvailableVersion = installedApp.availableVersion
                            });
                            break;
                        }
                    }
                }
            }

            RunOnMainThread(() =>
            {
                prgInstalled.Visibility       = Visibility.Collapsed;
                dataGridInstalled.ItemsSource = installedList;
            });
        }
 /// <summary>
 /// Добавить стратегии в таблицу.
 /// </summary>
 /// <param name="strategies">Стратегии.</param>
 public void AddStrategies(IEnumerable <Strategy> strategies)
 {
     GuiDispatcher.GlobalDispatcher.AddAction(() =>
     {
         foreach (var strategy in strategies)
         {
             var item = new StrategyItem(strategy);
             _map.Add(strategy, item);
             _strategies.Add(item);
             CreateColumns(strategy);
         }
     });
 }
        private void addPosts(int index = 0)
        {
            /*
             * foreach (JToken post in list)
             *  posts.Add(new Post(post, 200, 10));
             */

            App.UIDispatcher.BeginInvoke(() =>
            {
                posts.Add(new Post(list[index], 200, 10));
                if (++index < list.Count)
                {
                    addPosts(index);
                }
            });
        }
Пример #16
0
 public void LogSpell(string npcName, uint npcId, string spellName, uint spellId)
 {
     Application.Current.Dispatcher.InvokeAsync(() =>
     {
         if (spellLogCollection.Count > 300)
         {
             spellLogCollection.RemoveAt(0);
         }
         spellLogCollection.Add(new SpellInfo
         {
             NpcName   = npcName,
             NpcId     = npcId,
             SpellName = spellName,
             SpellId   = spellId
         });
     });
 }
Пример #17
0
        private void Assets_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var asset = SelectedAsset;

            _model.UnderlyingAsset = asset;

            _model.Clear();
            _options.Clear();

            var options = asset.GetDerivatives(Connector);

            foreach (var security in options)
            {
                _model.Add(security);
                _options.Add(security);
            }

            ProcessPositions();
        }
Пример #18
0
 /// <summary>
 /// Adds all albums to <see cref="AlbumCollection"/>.
 /// </summary>
 /// <remarks>This is still experimental, a lot of performance improvements are needed.
 /// For instance, for each loop needs to be removed.
 /// Maybe we can use direct database queries and fill the AlbumCollection with it?
 /// </remarks>
 public void AddAlbums()
 {
     foreach (var song in LibVM.TracksCollection.Elements)
     {
         Album alb = null;
         if (!AlbumCollection.Any(t => t.AlbumName == song.Album && t.Artist == song.LeadArtist))
         {
             alb           = new Album();
             alb.AlbumName = song.Album;
             alb.Artist    = song.LeadArtist;
             alb.AlbumArt  = song.AttachedPicture;
             AlbumCollection.Add(alb);
         }
         else
         {
             AlbumCollection.First(t => t.AlbumName == song.Album && t.Artist == song.LeadArtist).AlbumSongs.Add(song);
         }
     }
 }
        private void GetAssetsClick(object sender, RoutedEventArgs e)
        {
            _assetsList.Clear();
            if (!App.FtpOperations.HaveSettings)
            {
                return;
            }
            var bw = new BackgroundWorker();

            bw.DoWork += (o, args) => {
                try {
                    var path = Path.Combine(Path.GetTempPath(), "AuroraAssetEditor.db");
                    if (!App.FtpOperations.DownloadContentDb(path))
                    {
                        return;
                    }
                    foreach (var title in AuroraDbManager.GetDbTitles(path))
                    {
                        _assetsList.Add(title);
                    }
                    args.Result = true;
                }
                catch (Exception ex) {
                    MainWindow.SaveError(ex);
                    args.Result = false;
                }
            };
            bw.RunWorkerCompleted += (o, args) => {
                _main.BusyIndicator.Visibility = Visibility.Collapsed;
                if ((bool)args.Result)
                {
                    Status.Text = "Finished grabbing FTP Assets information successfully...";
                }
                else
                {
                    Status.Text = "There was an error, check error.log for more information...";
                }
            };
            _main.BusyIndicator.Visibility = Visibility.Visible;
            Status.Text = "Grabbing FTP Assets information...";
            bw.RunWorkerAsync();
        }
Пример #20
0
        private void CheckClick(object sender, RoutedEventArgs e)
        {
            var terminal = SelectedTerminal;

            if (terminal.SystemProcess.MainModule == null)
            {
                throw new InvalidOperationException(LocalizedStrings.InvalidProcess);
            }

            OkResult.SetVisibility(false);

            _settingErrors.Clear();

            var isDde = IsDde.IsChecked == true;

            var connector = new QuikTrader(terminal.SystemProcess.MainModule.FileName)
            {
                IsDde = isDde
            };

            var checkDde = isDde && CheckDde.IsChecked == true;

            connector.Connected += () => this.GuiAsync(() =>
            {
                if (checkDde)
                {
                    connector.StartExport();
                }

                OnConnect(connector, null);
            });

            connector.ConnectionError += error => this.GuiSync(() => OnConnect(connector, error));

            if (checkDde)
            {
                connector.ProcessDataError += error => _settingErrors.Add(new SettingsError(LocalizedStrings.Str3030Params.Put(error.Message), true));
            }

            connector.Connect();
        }
Пример #21
0
        public override void Init(bool setToDefaultValues = false)
        {
            // Set peaking equalizer effect with no bands
            _eq            = new PeakEQParameters();
            _fxEq          = Bass.ChannelSetFX(_handle, EffectType.PeakEQ, 0);
            _eq.fQ         = 0f;
            _eq.fBandwidth = 2.5f;
            _eq.lChannel   = FXChannelFlags.All;

            //init equalizer bands
            Bands = new ThreadSafeObservableCollection <IEqualizerBand>();

            var gainValues = !setToDefaultValues && EqualizerSettings != null ? EqualizerSettings.GainValues : null;

            for (int i = 0; i < EqDefaultValues.Length; i++)
            {
                _eq.lBand   = i;
                _eq.fCenter = EqDefaultValues[i][0];
                var res  = Bass.FXSetParameters(_fxEq, _eq);
                var band = new BassEqualizerBand(_fxEq, i, EqDefaultValues[i][0], EqDefaultValues[i][1], IsEnabled);

                if (band == null)
                {
                    continue;
                }

                if (gainValues != null && gainValues.TryGetValue(band.BandCaption, out float savedValue))
                {
                    band.Gain = savedValue;
                }
                band.PropertyChanged += (sender, e) =>
                {
                    if (e.PropertyName == "Gain")
                    {
                        SaveEqualizerSettings();
                    }
                };
                Bands.Add(band);
            }
        }
Пример #22
0
        private ReadOnlyObservableCollection<TickerProviderViewModel> InitializeProviders()
        {
            var observableProviders = new ThreadSafeObservableCollection<TickerProviderViewModel>();
            
            this.providerVMs = new ReadOnlyObservableCollection<TickerProviderViewModel>(observableProviders);
            (this.providerVMs as INotifyCollectionChanged).CollectionChanged += (s, e) =>
            {
                if (e.NewItems.Count > 0 && SelectedProvider == null)
                    SelectedProvider = e.NewItems[0] as TickerProviderViewModel;
                
                CanChangeProvider = providerVMs.Count > 1;
            };

            foreach (var arProvider in loadProvidersService.Load())
                arProvider.AddCallback(x =>
                    {
                        if (x.Error == null)
                            observableProviders.Add(new TickerProviderViewModel(x.Result));
                    });

            return this.providerVMs;
        }
Пример #23
0
        public void GoadTargetListUpdate()
        {
            if (goadTargetCollection != null && goadTargetCollection?.Count != 0)
            {
                foreach (var pm in goadTargetCollection?.Where(x => !x.AllyIsValid()))
                {
                    Logger.KefkaLog("{0} is no longer a valid target. Removing them from the Goad Target List.", pm.SafeName());
                    goadTargetCollection?.Remove(pm);
                }
            }

            foreach (var pm in PartyManager.VisibleMembers.Select(x => x.GameObject as BattleCharacter).Where(x => x != null &&
                                                                                                              x.AllyIsValid() &&
                                                                                                              x.Type == GameObjectType.Pc &&
                                                                                                              (x.CurrentJob == ClassJobType.Marauder || x.CurrentJob == ClassJobType.Warrior ||
                                                                                                               x.CurrentJob == ClassJobType.Gladiator || x.CurrentJob == ClassJobType.Paladin ||
                                                                                                               x.CurrentJob == ClassJobType.Archer || x.CurrentJob == ClassJobType.Bard ||
                                                                                                               x.CurrentJob == ClassJobType.Lancer || x.CurrentJob == ClassJobType.Dragoon ||
                                                                                                               x.CurrentJob == ClassJobType.Pugilist || x.CurrentJob == ClassJobType.Monk ||
                                                                                                               x.CurrentJob == ClassJobType.Rogue || x.CurrentJob == ClassJobType.Ninja ||
                                                                                                               x.CurrentJob == ClassJobType.Machinist || x.CurrentJob == ClassJobType.DarkKnight) &&
                                                                                                              !x.IsMe))
            {
                if (goadTargetCollection != null)
                {
                    if (!goadTargetCollection.Contains(pm))
                    {
                        Logger.KefkaLog("Adding {0} to the Goad Target List.", pm.SafeName());
                    }
                    if (!goadTargetCollection.Contains(pm))
                    {
                        goadTargetCollection?.Add(pm);
                    }
                }
            }
        }
Пример #24
0
        private void InitConnector()
        {
            // subscribe on connection successfully event
            Connector.Connected += () =>
            {
                // update gui labels
                this.GuiAsync(() => ChangeConnectStatus(true));
            };

            // subscribe on disconnection event
            Connector.Disconnected += () =>
            {
                // update gui labels
                this.GuiAsync(() => ChangeConnectStatus(false));
            };

            // subscribe on connection error event
            Connector.ConnectionError += error => this.GuiAsync(() =>
            {
                // update gui labels
                ChangeConnectStatus(false);

                MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
            });

            // fill underlying asset's list
            Connector.NewSecurity += security =>
            {
                if (security.Type == SecurityTypes.Future)
                {
                    _assets.Add(security);
                }
            };

            Connector.SecurityChanged += security =>
            {
                if (_model.UnderlyingAsset == security || _model.UnderlyingAsset.Id == security.UnderlyingSecurityId)
                {
                    _isDirty = true;
                }
            };

            // subscribing on tick prices and updating asset price
            Connector.NewTrade += trade =>
            {
                if (_model.UnderlyingAsset == trade.Security || _model.UnderlyingAsset.Id == trade.Security.UnderlyingSecurityId)
                {
                    _isDirty = true;
                }
            };

            Connector.NewPosition += position => this.GuiAsync(() =>
            {
                var asset = SelectedAsset;

                if (asset == null)
                {
                    return;
                }

                var assetPos = position.Security == asset;
                var newPos   = position.Security.UnderlyingSecurityId == asset.Id;

                if (!assetPos && !newPos)
                {
                    return;
                }

                //if (assetPos)
                //	PosChart.AssetPosition = position;

                //if (newPos)
                //	PosChart.Positions.Add(position);

                RefreshChart();
            });

            Connector.PositionChanged += position => this.GuiAsync(() =>
            {
                if ((PosChart.UnderlyingAsset != null && PosChart.UnderlyingAsset == position.Security) || PosChart.Options.Contains(position.Security))
                {
                    RefreshChart();
                }
            });

            try
            {
                if (File.Exists(_settingsFile))
                {
                    var ctx = new ContinueOnExceptionContext();
                    ctx.Error += ex => ex.LogError();

                    using (new Scope <ContinueOnExceptionContext> (ctx))
                        Connector.Load(new XmlSerializer <SettingsStorage>().Deserialize(_settingsFile));
                }
            }
            catch
            {
            }
        }
Пример #25
0
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (Connector != null && !(Connector is FakeConnector))
            {
                return;
            }

            PosChart.Positions.Clear();
            PosChart.AssetPosition = null;
            PosChart.Refresh(1, 1, default(DateTimeOffset), default(DateTimeOffset));

            // create connection
            Connector = new QuikTrader();

            //_trader = new PlazaTrader { IsCGate = true };
            //_trader.Tables.Add(_trader.TableRegistry.Volatility);

            Portfolio.Portfolios = new PortfolioDataSource(Connector);

            PosChart.MarketDataProvider = Connector;
            PosChart.SecurityProvider   = Connector;

            // fill underlying asset's list
            Connector.NewSecurity += security =>
            {
                if (security.Type == SecurityTypes.Future)
                {
                    _assets.Add(security);
                }
            };

            Connector.SecurityChanged += security =>
            {
                if ((PosChart.AssetPosition != null && PosChart.AssetPosition.Security == security) || PosChart.Positions.Cache.Select(p => p.Security).Contains(security))
                {
                    _isDirty = true;
                }
            };

            // subscribing on tick prices and updating asset price
            Connector.NewTrade += trade =>
            {
                var assetPos = PosChart.AssetPosition;
                if (assetPos != null && trade.Security == assetPos.Security)
                {
                    _isDirty = true;
                }
            };

            Connector.NewPosition += position => this.GuiAsync(() =>
            {
                var asset = SelectedAsset;

                if (asset == null)
                {
                    return;
                }

                var assetPos = position.Security == asset;
                var newPos   = position.Security.UnderlyingSecurityId == asset.Id;

                if (!assetPos && !newPos)
                {
                    return;
                }

                if (assetPos)
                {
                    PosChart.AssetPosition = position;
                }

                if (newPos)
                {
                    PosChart.Positions.Add(position);
                }

                RefreshChart();
            });

            Connector.PositionChanged += position => this.GuiAsync(() =>
            {
                if ((PosChart.AssetPosition != null && PosChart.AssetPosition == position) || PosChart.Positions.Cache.Contains(position))
                {
                    RefreshChart();
                }
            });

            Connector.Connect();
        }
Пример #26
0
        private void InitConnector()
        {
            // fill underlying asset's list
            Connector.NewSecurity += security =>
            {
                if (security.Type == SecurityTypes.Future)
                {
                    _assets.Add(security);
                }
            };

            Connector.SecurityChanged += security =>
            {
                if ((PosChart.AssetPosition != null && PosChart.AssetPosition.Security == security) || PosChart.Positions.Cache.Select(p => p.Security).Contains(security))
                {
                    _isDirty = true;
                }
            };

            // subscribing on tick prices and updating asset price
            Connector.NewTrade += trade =>
            {
                var assetPos = PosChart.AssetPosition;
                if (assetPos != null && trade.Security == assetPos.Security)
                {
                    _isDirty = true;
                }
            };

            Connector.NewPosition += position => this.GuiAsync(() =>
            {
                var asset = SelectedAsset;

                if (asset == null)
                {
                    return;
                }

                var assetPos = position.Security == asset;
                var newPos   = position.Security.UnderlyingSecurityId == asset.Id;

                if (!assetPos && !newPos)
                {
                    return;
                }

                if (assetPos)
                {
                    PosChart.AssetPosition = position;
                }

                if (newPos)
                {
                    PosChart.Positions.Add(position);
                }

                RefreshChart();
            });

            Connector.PositionChanged += position => this.GuiAsync(() =>
            {
                if ((PosChart.AssetPosition != null && PosChart.AssetPosition == position) || PosChart.Positions.Cache.Contains(position))
                {
                    RefreshChart();
                }
            });

            try
            {
                if (File.Exists(_settingsFile))
                {
                    Connector.Load(new XmlSerializer <SettingsStorage>().Deserialize(_settingsFile));
                }
            }
            catch
            {
            }
        }
Пример #27
0
 private void AddStrategy(string name, Strategy strategy)
 {
     _itemsTs.Add(new StrategyItem(name, strategy));
     MainWindow.Instance.LogManager.Sources.Add(strategy);
     strategy.Start();
 }
Пример #28
0
 private void FillSkillLog(ThreadSafeObservableCollection<AggregatedSkillResult> skillLog,
     IEnumerable<AggregatedSkillResult> results)
 {
     foreach (var result in results)
         skillLog.Add(result);
 }
Пример #29
0
        public static void ToTeraDpsApi(SDespawnNpc despawnNpc, DamageTracker damageTracker, EntityTracker entityTracker, TeraData teraData)
        {
            if (!despawnNpc.Dead)
            {
                return;
            }
            var entity = entityTracker.GetOrPlaceholder(despawnNpc.Npc) as NpcEntity;

            if (!(entity?.Info.Boss ?? false))
            {
                return;
            }

            if (!SettingsHelper.Instance.Settings.ExcelExport &&
                (string.IsNullOrEmpty(SettingsHelper.Instance.Settings.TeraDpsToken) ||
                 string.IsNullOrEmpty(SettingsHelper.Instance.Settings.TeraDpsUser) ||
                 !SettingsHelper.Instance.Settings.SiteExport)
                )
            {
                return;
            }


            var  abnormals      = damageTracker.Abnormals;
            bool timedEncounter = false;

            //Nightmare desolarus
            if (entity.Info.HuntingZoneId == 759 && entity.Info.TemplateId == 1003)
            {
                timedEncounter = true;
            }

            var firstHit  = damageTracker.StatsByUser.SelectMany(x => x.SkillLog).Where(x => x.Target == entity).Min(x => x.Time as DateTime?) ?? new DateTime(0);
            var lastHit   = damageTracker.StatsByUser.SelectMany(x => x.SkillLog).Where(x => x.Target == entity).Max(x => x.Time as DateTime?) ?? new DateTime(0);
            var firstTick = firstHit.Ticks;
            var lastTick  = lastHit.Ticks;
            var interval  = lastTick - firstTick;
            var seconds   = interval / TimeSpan.TicksPerSecond;

            if (seconds == 0)
            {
                return;
            }
            long totaldamage;

            if (timedEncounter)
            {
                totaldamage =
                    damageTracker.StatsByUser.SelectMany(x => x.SkillLog)
                    .Where(x => x.Time >= firstHit && x.Time <= lastHit)
                    .Sum(x => x.Damage);
            }
            else
            {
                totaldamage =
                    damageTracker.StatsByUser.SelectMany(x => x.SkillLog)
                    .Where(x => x.Target == entity)
                    .Sum(x => x.Damage);
            }

            var partyDps    = TimeSpan.TicksPerSecond * totaldamage / interval;
            var teradpsData = new EncounterBase
            {
                areaId        = entity.Info.HuntingZoneId + "",
                bossId        = entity.Info.TemplateId + "",
                fightDuration = seconds + "",
                partyDps      = partyDps + ""
            };

            foreach (var debuff in abnormals.Get(entity))
            {
                long percentage = debuff.Value.Duration(firstTick, lastTick) * 100 / interval;
                if (percentage == 0)
                {
                    continue;
                }
                teradpsData.debuffUptime.Add(new KeyValuePair <string, string>(
                                                 debuff.Key.Id + "", percentage + ""
                                                 ));
            }

            foreach (var user in damageTracker.StatsByUser)
            {
                var filteredSkillog = timedEncounter
                    ? user.SkillLog.Where(x => x.Time >= firstHit && x.Time <= lastHit).ToList()
                    : user.SkillLog.Where(x => x.Target == entity).ToList();

                long damage = filteredSkillog.Sum(x => x.Damage);
                if (damage <= 0)
                {
                    continue;
                }

                var teradpsUser = new Members();

                teradpsUser.playerTotalDamage = damage + "";
                var buffs = abnormals.Get(user.Player);
                teradpsUser.playerClass           = user.Class.ToString();
                teradpsUser.playerName            = user.Name;
                teradpsUser.playerServer          = SettingsHelper.Instance.BasicTeraData.Servers.GetServerName(user.Player.ServerId);
                teradpsUser.playerAverageCritRate = Math.Round(100 * (double)filteredSkillog.Count(x => x.IsCritical && x.Damage > 0) / filteredSkillog.Count(x => x.Damage > 0), 1) + "";
                teradpsUser.healCrit  = user.Player.IsHealer ? Math.Round(100 * (double)filteredSkillog.Count(x => x.IsCritical && x.Heal > 0) / filteredSkillog.Count(x => x.Heal > 0), 1) + "" : null;
                teradpsUser.playerDps = TimeSpan.TicksPerSecond * damage / interval + "";
                teradpsUser.playerTotalDamagePercentage = damage * 100 / totaldamage + "";

                var death = buffs.Death;
                teradpsUser.playerDeaths        = death.Count(firstTick, lastTick) + "";
                teradpsUser.playerDeathDuration = death.Duration(firstTick, lastTick) / TimeSpan.TicksPerSecond + "";

                var aggro = buffs.Aggro(entity);
                teradpsUser.aggro = 100 * aggro.Duration(firstTick, lastTick) / interval + "";

                foreach (var buff in buffs.Times)
                {
                    long percentage = (buff.Value.Duration(firstTick, lastTick) * 100 / interval);
                    if (percentage == 0)
                    {
                        continue;
                    }
                    teradpsUser.buffUptime.Add(new KeyValuePair <string, string>(
                                                   buff.Key.Id + "", percentage + ""
                                                   ));
                }

                var aggregated = new List <AggregatedSkillResult>();
                var collection = new ThreadSafeObservableCollection <SkillResult>();
                foreach (var skill in filteredSkillog)
                {
                    collection.Add(skill);
                    if (aggregated.All(asr => !skill.IsSameSkillAs(asr)))
                    {
                        aggregated.Add(new AggregatedSkillResult(skill.SkillShortName, skill.IsHeal, AggregationType.Name, collection));
                    }
                }
                foreach (var skill in aggregated)
                {
                    var skillLog    = new SkillLog();
                    var skilldamage = skill.Damage;
                    if (skilldamage == 0)
                    {
                        continue;
                    }

                    skillLog.skillAverageCrit   = skill.AverageCrit + "";
                    skillLog.skillAverageWhite  = skill.AverageWhite + "";
                    skillLog.skillCritRate      = Math.Round(skill.CritRate * 100, 1) + "";
                    skillLog.skillDamagePercent = Math.Round(skill.DamagePercent * 100, 1) + "";
                    skillLog.skillHighestCrit   = skill.HighestCrit + "";
                    skillLog.skillHits          = skill.Hits + "";
                    skillLog.skillId            = teraData.SkillDatabase.GetSkillByPetName(skill.NpcInfo?.Name, user.Player.RaceGenderClass)?.Id.ToString() ?? skill.SkillId.ToString();
                    skillLog.skillLowestCrit    = skill.LowestCrit + "";
                    skillLog.skillTotalDamage   = skilldamage + "";

                    teradpsUser.skillLog.Add(skillLog);
                }
                teradpsData.members.Add(teradpsUser);
            }

            if (SettingsHelper.Instance.Settings.ExcelExport)
            {
                Task.Run(() => ExcelExport.ExcelSave(teradpsData, teraData));
            }
            if (string.IsNullOrEmpty(SettingsHelper.Instance.Settings.TeraDpsToken) || string.IsNullOrEmpty(SettingsHelper.Instance.Settings.TeraDpsUser) || !SettingsHelper.Instance.Settings.SiteExport)
            {
                return;
            }

            /*
             * Validation, without that, the server cpu will be burning \o
             */
            var areaId = int.Parse(teradpsData.areaId);

            if (
                areaId != 886 &&
                areaId != 467 &&
                areaId != 767 &&
                areaId != 768 &&
                areaId != 470 &&
                areaId != 468
                )
            {
                return;
            }

            if (int.Parse(teradpsData.partyDps) < 2000000 && areaId != 468)
            {
                return;
            }
            string json = JsonConvert.SerializeObject(teradpsData, new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            });

            Task.Run(() => Send(entity, json, 3));
        }
Пример #30
0
 private void AddSecurity(Security security)
 {
     _itemsSource.Add(security);
 }
Пример #31
0
        private void ChatControl_OnLoaded()
        {
            var client = Client;

            client.AuthorAdded    += OnAuthorAdded;
            client.AuthorDeleted  += OnAuthorDeleted;
            client.JoinAccepted   += OnJoinAccepted;
            client.JoinRejected   += OnJoinRejected;
            client.JoinSended     += OnJoinSended;
            client.LoggedIn       += OnLoggedIn;
            client.LoggedOut      += OnLoggedOut;
            client.MessageCreated += OnMessageCreated;
            client.MessageUpdated += OnMessageUpdated;
            client.MessageDeleted += OnMessageDeleted;
            client.RoomCreated    += OnRoomCreated;
            client.RoomDeleted    += OnRoomDeleted;
            client.RoomUpdated    += OnRoomUpdated;

            var cmdSvc = ConfigManager.GetService <IStudioCommandService>();

            cmdSvc.Register <LoggedInCommand>(this, false, cmd =>
            {
                IsEnabled = true;

                var rooms = _chatRooms.ToDictionary(i => i.Room, i => i);

                foreach (var room in client.AllRooms)
                {
                    var item = rooms.TryGetValue(room);

                    if (item != null)
                    {
                        rooms.Remove(room);
                        continue;
                    }

                    item = new RoomItem(room);
                    item.Users.AddRange(client.GetAuthors(room));
                    _chatRooms.Add(item);
                }

                _chatRooms.RemoveRange(rooms.Values);
                UpdateTitle();
            });
            cmdSvc.Register <LoggedOutCommand>(this, false, cmd =>
            {
                IsEnabled = false;
                UpdateTitle();
            });

            IsEnabled = ConfigManager.GetService <AuthenticationClient>().IsLoggedIn;
            UpdateTitle();

            if (IsEnabled)
            {
                return;
            }

            var res = new MessageBoxBuilder()
                      .Owner(this)
                      .Text(LocalizedStrings.Str3207)
                      .Warning()
                      .YesNo()
                      .Show();

            if (res == MessageBoxResult.Yes)
            {
                cmdSvc.Process(this, new LogInCommand());
            }
        }