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); }
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); }
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)); }
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()); }
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); }
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)); }
public int Step1() { if (!ApiVendor.HasToken()) { return(02_0008); } var result = ApiCall.SessionLogout.Call(null, null); return(00_0000); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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"); } }); } }
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; }); }); } }
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}"); }
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"); } }); }