Exemplo n.º 1
0
        public int Step2(int[] itemid, int partid, out OverviewResponse res)
        {
            res = null;

            if (itemid.Any(CheckVendor.NotValidItemId) || !ApiVendor.HasToken())
            {
                return(02_0008);
            }

            var or = new OverviewRequest();

            or.QueryItems = itemid;
            or.ReportTime = DateTime.Now;

            var result = ApiCall.DataOverview.Call(partid.ToString(), new MilvanethProtocol {
                Context = null, Data = or
            });

            if (!(result.Data is OverviewResponse pr))
            {
                return(02_0007);
            }

            if (CheckVendor.NotValidResponse(pr))
            {
                return(pr.Message);
            }

            res = pr;
            return(00_0000);
        }
Exemplo n.º 2
0
        public int Step3(out byte[] renewToken)
        {
            renewToken = null;

            if (CheckVendor.NotValidResponse(_serverResponse))
            {
                return(02_0008);
            }

            var authRequest = new AuthRequest();

            authRequest.Username = _username;

            authRequest.AuthToken = _serverResponse.AuthToken;

            authRequest.ReportTime = DateTime.Now;

            var result = ApiCall.SessionCreate.Call(null, new MilvanethProtocol {
                Context = null, Data = authRequest
            });

            if (!(result.Data is AuthResponse ar))
            {
                return(02_0007);
            }

            if (!CheckVendor.NotValidResponse(ar))
            {
                renewToken = ar.RenewToken;
                ApiVendor.SetToken(ar.SessionToken);
            }

            return(ar.Message);
        }
Exemplo n.º 3
0
        private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            _sr.InteractiveTask(() =>
            {
                int ret;

                _sr.Procedure = null;
                var local     = new LogoutProcedure();

                try
                {
                    ret = local.Step1();
                }
                catch (HttpRequestException ex)
                {
                    ret = 02_0000 + (int)(ex.Data["StatusCode"]);
                }
                catch (Exception)
                {
                    ret = 02_0000;
                }

                if (CheckVendor.NotValidResponseCode(ret))
                {
                    Growl.Error(MessageVendor.FormatError(ret));
                }
                else
                {
                    ApiVendor.SetRenew(null);
                    SubwindowNavigator.Navigate(SubwindowPage.LoggedOut);
                }
            });
            _sr.InteractiveTask(() => SubwindowNavigator.Navigate(SubwindowPage.LoggedOut));
        }
Exemplo n.º 4
0
        public static bool RemoteInitialize(bool autoUpdateEnabled)
        {
            var startTimeSpan  = TimeSpan.FromHours(1);
            var periodTimeSpan = TimeSpan.FromHours(1);

            _timer = new Timer(e =>
            {
                try
                {
                    InlineLogic.UpdateLogic(includeOptional: autoUpdateEnabled);
                }
                catch
                {
                    // ignored
                }
                finally
                {
                    // avoid overlapping
                    _timer.Change((int)periodTimeSpan.TotalMilliseconds, Timeout.Infinite);
                }
            }, null, (int)startTimeSpan.TotalMilliseconds, Timeout.Infinite);

            try
            {
                InlineLogic.UpdateLogic(includeOptional: autoUpdateEnabled);
            }
            catch
            {
                // ignored
            }

            return(!ApiVendor.ValidateAndRenewToken());
        }
Exemplo n.º 5
0
        public MainWindow(Mutex mutex, out bool showUsrDiag)
        {
            // data router
            _mutex = mutex;
            br     = new BindingRouter(env);

            // services
            if (!ApiVendor.TryPrepareRestApi())
            {
                InlineLogic.ServerUnreachableLogic();
            }

            showUsrDiag = SupportStatic.RemoteInitialize(br.ConfAutoUpdate);
            SupportStatic.InitializeAll();

            pool = new DataPool(x => LoggingManagementService.WriteLine(x, "UplMgmt"));

            SubprocessManagementService.OnOverrideRequested += br.SaveConfig;
            LoggingManagementService.OnNewLogLine           += br.DummyListener;
            TransmittingManagementService.OnDataOutput      += pool.SinkData;
            TransmittingManagementService.OnDataOutput      += LocalHandler;

            // user interface
            InitializeComponent();
            InitializeWinformComponent();
            CommandBindings.Add(new CommandBinding(BindingRouter.UiSearchLineEnterCommand, OnCommandLineEnter));
            this.DataContext = br;

#if DEBUG
            Title = "Milvaneth Prélude";
#endif

            // subviews
            ip = new ItemOverviewPage(br);
            sp = new SettingPage(br);
            lp = new LogPage(br);
            ap = new AboutPage(br);

            // custom message
            InlineLogic.GlobalMessageLogic();

            if (!showUsrDiag)
            {
                ShowOverlay();
            }

            // finish initialize
            if (br.ConfAutoAttach)
            {
                SubprocessManagementService.SpawnAll(out _);
            }
            if (!br.ConfNotUseHunter)
            {
                SubprocessManagementService.SpawnHunter();
            }

            br.UiActiveTab = 3;
            MainFrame.Navigate(ap);
        }
Exemplo n.º 6
0
 private string FormatRoute(string url)
 {
     return(MilvanethConfig.Store.Api.Prefix
            .AppendPathSegment(url)
            // token can be ignored so it's safe to leave it here
            .SetQueryParam("token", ApiVendor.GetToken())
            // Environment.TickCount is faster than DateTime.Now.Ticks
            .SetQueryParam("t", Environment.TickCount));
 }
Exemplo n.º 7
0
        public int Step1()
        {
            if (!ApiVendor.HasToken())
            {
                return(02_0008);
            }

            var result = ApiCall.SessionLogout.Call(null, null);

            return(00_0000);
        }
Exemplo n.º 8
0
        public static void PrepareDefaultPage(SubwindowRouter router, Frame frame, Dispatcher dispatcher)
        {
            _router     = router;
            _naviFrame  = frame;
            _dispatcher = dispatcher;

            if (File.Exists(Helper.GetMilFilePathRaw(".consent")))
            {
                Navigate(ApiVendor.HasToken() ? SubwindowPage.LoggedIn : SubwindowPage.LoggedOut);
                return;
            }

            Navigate(SubwindowPage.Welcome);
        }
Exemplo n.º 9
0
        public int Step2(out byte[] renewToken)
        {
            renewToken = null;

            if (CheckVendor.NotValidResponse(_authResponse))
            {
                return(02_0008);
            }

            renewToken = _authResponse.RenewToken;
            ApiVendor.SetToken(_authResponse.SessionToken);

            return(_authResponse.Message);
        }
Exemplo n.º 10
0
        private void UploadTask()
        {
            if (_dataQueue.TryDequeue(out var data))
            {
                try
                {
                    var ret = _exchange.Step1(data);

                    if (ret == 04_0511 && ApiVendor.HasToken())
                    {
                        ApiVendor.RenewToken(DataHolder.Username, ref DataHolder.RenewToken);
                        _exchange.Step1(data);
                    }

                    if (!CheckVendor.NotValidResponseCode(ret))
                    {
                        _onDataUploaded?.Invoke($"Data Uploaded: {((PackedResult)data.Data).Type.ToString()}");
                    }
                }
                catch (HttpRequestException e)
                {
                    try
                    {
                        if ((int)e.Data["StatusCode"] == 511 && ApiVendor.HasToken())
                        {
                            ApiVendor.RenewToken(DataHolder.Username, ref DataHolder.RenewToken);
                            _exchange.Step1(data);
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
                catch
                {
                    // ignored
                }
            }

            Thread.Sleep(250);
        }
Exemplo n.º 11
0
        public int Step1(MilvanethProtocol mp)
        {
            if (!ApiVendor.HasToken())
            {
                return(02_0008);
            }

            if (mp == null) // as we have karma, this is not too serious
            {
                return(00_0001);
            }

            if (CheckVendor.NotValidData(mp))
            {
                return(02_0008);
            }

            var result = ApiCall.DataUpload.Call(null, mp);

            return(00_0000);
        }
Exemplo n.º 12
0
        public int Step2(int itemid, out PackedResultBundle res)
        {
            res = null;

            if (CheckVendor.NotValidItemId(itemid) || !ApiVendor.HasToken())
            {
                return(02_0008);
            }

            var result = ApiCall.DataItem.Call(itemid.ToString(), null);

            if (!(result.Data is PackedResultBundle pr))
            {
                return(02_0007);
            }

            if (CheckVendor.NotValidResponse(pr))
            {
                return(pr.Message);
            }

            res = pr;
            return(00_0000);
        }
Exemplo n.º 13
0
        public int Step2(out AccountStatus status)
        {
            status = null;

            if (!ApiVendor.HasToken())
            {
                return(02_0008);
            }

            var result = ApiCall.AccountStatus.Call(null, null);

            if (!(result.Data is AccountStatus ac))
            {
                return(02_0007);
            }

            if (CheckVendor.NotValidResponse(ac))
            {
                return(ac.Message);
            }

            status = ac;
            return(00_0000);
        }
Exemplo n.º 14
0
        public int Step1(string displayName, long[] trace, byte[] additional)
        {
            if (CheckVendor.NotValidDisplayName(displayName) || CheckVendor.NotValidTrace(trace) || !ApiVendor.HasToken())
            {
                return(02_0008);
            }

            var au = new AccountUpdate();

            au.DisplayName    = displayName;
            au.Trace          = trace;
            au.AdditionalData = additional;
            au.ReportTime     = DateTime.Now;

            var result = ApiCall.AccountUpdate.Call(null, new MilvanethProtocol {
                Context = null, Data = au
            });

            return(00_0000);
        }
Exemplo n.º 15
0
        private void ElementView_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            var item = ElementView.SelectedItem as OverviewPresenter;

            if (item != null)
            {
                br.OverlayItemId = item.ItemId;

                Task.Run(() =>
                {
                    RETRY:
                    int ret = 0;
                    br.OverlayListingData.Clear();
                    br.OverlayHistoryData.Clear();
                    var listing            = new List <ListingData>();
                    var history            = new List <HistoryData>();
                    PackedResultBundle res = null;

                    try
                    {
                        var local = new ExchangeProcedure();

                        try
                        {
                            ret = local.Step2(item.ItemId, out res);
                        }
                        catch (HttpRequestException exception)
                        {
                            ret = 02_0000 + (int)exception.Data["StatusCode"];
                        }


                        if (!CheckVendor.NotValidResponseCode(ret))
                        {
                            listing.AddRange(res.Listings.Select(x =>
                                                                 ListingData.FromResultItem(x.RawItem, x.ReportTime, 0, x.WorldId)));
                            history.AddRange(res.Histories.Select(x =>
                                                                  HistoryData.FromResultItem(x.RawItem, x.ReportTime, 0, x.WorldId)));
                        }

                        if (ret % 10000 == 0511 && ApiVendor.ValidateAndRenewToken())
                        {
                            goto RETRY;
                        }

                        br.OverlayListingData = listing.OrderBy(x => x.UnitPrice).ToList();
                        br.OverlayHistoryData = history.OrderByDescending(x => x.PurchaseTime).ToList();
                    }
                    catch (HttpRequestException ex)
                    {
                        ret = 02_0000 + (int)(ex.Data["StatusCode"]);
                        if (ret == 02_0511 && ApiVendor.ValidateAndRenewToken())
                        {
                            goto RETRY;
                        }
                    }
                    catch (Exception)
                    {
                        ret = 02_0000;
                    }

                    if (CheckVendor.NotValidResponseCode(ret))
                    {
                        LoggingManagementService.WriteLine(
                            $"Api Error: {MessageVendor.FormatError(ret)} on requesting {DictionaryManagementService.Item[item.ItemId]}",
                            "ApiSys");
                    }
                });
            }
        }
Exemplo n.º 16
0
        private void OnStartup(object sender, StartupEventArgs e)
        {
            var initWindow = new Initializing();

            initWindow.Show();

            Logger.Initialize(false, false);

            InlineLogic.InitializeLogic();

            var startMinimized = SupportStatic.RunMinimized(e.Args);

            var mainWindow = new MainWindow(_mutexwnd, out var hidden);

            initWindow.Close();

            if (!startMinimized && !hidden)
            {
                mainWindow.Show();
                mainWindow.Topmost = true;
                mainWindow.Topmost = false;
            }
            else
            {
                var am = new AccountManagement();
                am.Show();
                am.Topmost  = true;
                am.Topmost  = false;
                am.Closing += (o, args) =>
                {
                    if (!ApiVendor.HasToken())
                    {
                        InlineLogic.NotLoggedInLogic();
                        Environment.Exit(0);
                    }
                };

                Task.Run(() =>
                {
                    while (!ApiVendor.HasToken())
                    {
                        Thread.Sleep(1000);
                    }

                    if (Dispatcher?.CheckAccess() ?? true)
                    {
                        mainWindow.Show();
                        mainWindow.ShowOverlay();
                        mainWindow.Topmost = true;
                        mainWindow.Topmost = false;
                        return;
                    }

                    Dispatcher.Invoke(() =>
                    {
                        mainWindow.Show();
                        mainWindow.ShowOverlay();
                        mainWindow.Topmost = true;
                        mainWindow.Topmost = false;
                    });
                });
            }
        }
Exemplo n.º 17
0
        private void LocalHandler(int gameId, PackedResult result)
        {
            var worldId = pool.GetContext(gameId).World;

            if (result.Type == PackedResultType.MarketRequest)
            {
                var itemid = ((MarketRequestResult)result.Result).ItemId;
                Task.Run(() =>
                {
                    RETRY:
                    int ret                = 0;
                    var listing            = new List <ListingData>();
                    var history            = new List <HistoryData>();
                    PackedResultBundle res = null;

                    try
                    {
                        var local = new ExchangeProcedure();

                        try
                        {
                            ret = local.Step2(itemid, out res);
                        }
                        catch (HttpRequestException exception)
                        {
                            ret = 02_0000 + (int)exception.Data["StatusCode"];
                        }

                        if (!CheckVendor.NotValidResponseCode(ret))
                        {
                            listing.AddRange(res.Listings.Select(x =>
                                                                 ListingData.FromResultItem(x.RawItem, x.ReportTime, 0, x.WorldId)));
                            history.AddRange(res.Histories.Select(x =>
                                                                  HistoryData.FromResultItem(x.RawItem, x.ReportTime, 0, x.WorldId)));
                        }

                        if (ret % 10000 == 0511 && ApiVendor.ValidateAndRenewToken())
                        {
                            goto RETRY;
                        }

                        var lst = (List <ListingData>)DataHolder.GetCache(worldId, itemid, 0);
                        var hst = (List <HistoryData>)DataHolder.GetCache(worldId, itemid, 1);

                        if (lst != null)
                        {
                            listing.RemoveAll(x => x.World == worldId);
                            br.OverlayListingData = listing.Concat(lst)
                                                    .OrderBy(x => x.UnitPrice).ToList();
                        }
                        else
                        {
                            lst = br.OverlayListingData.Where(x => x.World == worldId && x.ItemId == itemid).ToList();

                            if (lst.Any())
                            {
                                listing.RemoveAll(x => x.World == worldId);
                                br.OverlayListingData = listing.Concat(lst)
                                                        .OrderBy(x => x.UnitPrice).ToList();
                            }

                            br.OverlayListingData = listing.OrderBy(x => x.UnitPrice).ToList();
                        }

                        if (hst != null)
                        {
                            history.RemoveAll(x => x.World == worldId);
                            br.OverlayHistoryData = history.Concat(hst)
                                                    .OrderByDescending(x => x.PurchaseTime).ToList();
                        }
                        else
                        {
                            hst = br.OverlayHistoryData.Where(x => x.World == worldId && x.ItemId == itemid).ToList();

                            if (hst.Any())
                            {
                                history.RemoveAll(x => x.World == worldId);
                                br.OverlayHistoryData = history.Concat(hst)
                                                        .OrderByDescending(x => x.PurchaseTime).ToList();
                            }

                            br.OverlayHistoryData = history.OrderByDescending(x => x.PurchaseTime).ToList();
                        }
                    }
                    catch (HttpRequestException ex)
                    {
                        ret = 02_0000 + (int)(ex.Data["StatusCode"]);
                        if (ret == 02_0511 && ApiVendor.ValidateAndRenewToken())
                        {
                            goto RETRY;
                        }
                    }
                    catch (Exception)
                    {
                        ret = 02_0000;
                    }

                    if (CheckVendor.NotValidResponseCode(ret))
                    {
                        LoggingManagementService.WriteLine(
                            $"Api Error: {MessageVendor.FormatError(ret)} on requesting {DictionaryManagementService.Item[itemid]}",
                            "ApiSys");
                    }
                });
            }

            if (result.Type == PackedResultType.MarketHistory)
            {
                var r = (MarketHistoryResult)result.Result;
                br.OverlayItemId = r.ItemId;
                var t = new List <HistoryData>();
                foreach (var i in r.HistoryItems)
                {
                    t.Add(new HistoryData
                    {
                        BuyerName    = i.BuyerName,
                        IsHq         = i.IsHq == 1,
                        ItemId       = i.ItemId,
                        OnMannequin  = i.OnMannequin == 1,
                        PurchaseTime = Helper.UnixTimeStampToDateTime(i.PurchaseTime),
                        Quantity     = i.Quantity,
                        UnitPrice    = i.UnitPrice,
                        UpdateTime   = DateTime.Now,
                        World        = worldId,
                        Zone         = 0
                    });
                }

                DataHolder.AddCache(worldId, r.ItemId, 1, t, 120);
            }

            if (result.Type == PackedResultType.MarketListing)
            {
                var r = (MarketListingResult)result.Result;
                var t = new List <ListingData>();
                foreach (var i in r.ListingItems)
                {
                    t.Add(new ListingData
                    {
                        ItemId           = i.ItemId,
                        IsHq             = i.IsHq == 1,
                        Materia          = new int[] { i.Materia1, i.Materia2, i.Materia3, i.Materia4, i.Materia5 },
                        UnitPrice        = i.UnitPrice,
                        Quantity         = i.Quantity,
                        Tax              = i.TotalTax,
                        Retainer         = i.RetainerName,
                        Artisan          = i.ArtisanId.ToString("X"),
                        OnMannequin      = i.OnMannequin == 1,
                        PlayerName       = i.PlayerName,
                        RetainerLocation = i.RetainerLocation,
                        DyeId            = i.DyeId,
                        ListingTime      = Helper.UnixTimeStampToDateTime(i.UpdateTime),
                        UpdateTime       = DateTime.Now,
                        World            = worldId,
                        Zone             = 0,
                    });
                }

                var sample = t.FirstOrDefault();
                if (sample != null)
                {
                    DataHolder.AddCache(worldId, sample.ItemId, 0, t, 120);
                }
            }

            LoggingManagementService.WriteLine($"Data Received: {result.Type.ToString()} @ {DictionaryManagementService.World[worldId]}", $"Game {gameId}");
        }
Exemplo n.º 18
0
        public void OnCommandLineEnter(object sender, ExecutedRoutedEventArgs e)
        {
            br.UiActiveTab = 0;
            MainFrame.Navigate(ip);
            var dic = DictionaryManagementService.SearchItem(br.UiSearchLine);

            br.OverlayOverviewData =
                dic.Select(x => new OverviewData {
                ItemId = x.Key, UpdateTime = DateTime.MinValue
            }).ToList();

            Task.Run(() =>
            {
                RETRY:

                int ret = 0;

                try
                {
                    var local            = new ExchangeProcedure();
                    var partCnt          = 0;
                    OverviewResponse res = null;

                    do
                    {
                        try
                        {
                            ret = local.Step2(dic.Keys.ToArray(), partCnt++, out res);
                        }
                        catch (HttpRequestException exception)
                        {
                            ret = 02_0000 + (int)exception.Data["StatusCode"];
                        }


                        if (!CheckVendor.NotValidResponseCode(ret))
                        {
                            var overviewDic = br.OverlayOverviewData.ToDictionary(x => x.ItemId, x => x);

                            foreach (var item in res.Results)
                            {
                                overviewDic[item.ItemId] =
                                    OverviewData.FromResultItem(overviewDic[item.ItemId], item);
                            }

                            br.OverlayOverviewData = overviewDic.Values.ToList();
                        }
                    } while (!CheckVendor.NotValidResponseCode(ret) && !res.FinalPart);

                    if (ret % 10000 == 0511 && ApiVendor.ValidateAndRenewToken())
                    {
                        goto RETRY;
                    }
                }
                catch (HttpRequestException ex)
                {
                    ret = 02_0000 + (int)(ex.Data["StatusCode"]);
                    if (ret == 02_0511 && ApiVendor.ValidateAndRenewToken())
                    {
                        goto RETRY;
                    }
                }
                catch (Exception)
                {
                    ret = 02_0000;
                }

                if (CheckVendor.NotValidResponseCode(ret))
                {
                    LoggingManagementService.WriteLine(
                        $"Api Error: {MessageVendor.FormatError(ret)} on searching {br.UiSearchLine}", "ApiSys");
                }
            });
        }