public virtual void Start(ILogger logger) { Logger = logger; OsuMemoryDataProvider.DataProvider.Initalize(); _memoryReader = OsuMemoryDataProvider.DataProvider.Instance; _settings.SettingUpdated += OnSettingsSettingUpdated; bool isFallback = _settings.Get <bool>(_names.OsuFallback); bool memoryScannerIsEnabled = _settings.Get <bool>(_names.EnableMemoryScanner); MemoryPoolingIsEnabled = _settings.Get <bool>(_names.EnableMemoryPooling); if (!memoryScannerIsEnabled) { return; } if (isFallback) { _settings.Add(_names.EnableMemoryScanner.Name, false); return; } lock (_lockingObject) _timer = new Timer(TimerCallback, null, 250, Int32.MaxValue); _memoryListener = new MemoryListener(Helpers.GetFullSongsLocation(_settings)); _memoryListener.NewOsuEvent += (s, args) => NewOsuEvent?.Invoke(this, args); _memoryListener.SetHighFrequencyDataHandlers(_highFrequencyDataHandlers); _memoryListener.SetSettingsHandle(_settings); Started = true; }
public Form1(string osuWindowTitleHint) { _osuWindowTitleHint = osuWindowTitleHint; InitializeComponent(); _reader = OsuMemoryReader.Instance.GetInstanceForWindowTitleHint(osuWindowTitleHint); Shown += OnShown; Closing += OnClosing; numericUpDown_readDelay.ValueChanged += NumericUpDownReadDelayOnValueChanged; }
public OsuStateWriter(int socketPort) { _reader = OsuMemoryReader.Instance.GetInstanceForWindowTitleHint("osu!"); _webSocketServer = new WebSocketServer(IPAddress.Parse(_webSocketAddress), socketPort); _webSocketServer.ReuseAddress = true; _webSocketServer.WaitTime = TimeSpan.FromSeconds(30); _webSocketServer.AddWebSocketService("/GifToTheBeatOsuDataFeed", () => new DataSender(_dataContainer)); _webSocketServer.Start(); }
public MainForm() { InitializeComponent(); nobg = Image.FromFile(nobgpng); // init control lists dumbLabels = new List <Label> { hplabel, cslabel, arlabel, odlabel, label2, label4, label5 }; diffDisplays = new List <TextBox> { HPDisplay, CSDisplay, ARDisplay, ODDisplay }; diffSliders = new List <OptionSlider> { HPSlider, CSSlider, ARSlider, ODSlider }; // load user settings if (Directory.Exists(Properties.Settings.Default.SongsFolder)) { userSongsFolder = Properties.Settings.Default.SongsFolder; } // Init object instances osuReader = OsuMemoryReader.Instance.GetInstanceForWindowTitleHint(""); editor = new BeatmapEditor(this); // Add event handlers (observers) editor.StateChanged += ToggleDumbLabels; editor.StateChanged += ToggleGenerateButton; editor.StateChanged += ToggleHpCsArOdDisplay; editor.StateChanged += ToggleDifficultyDisplay; editor.StateChanged += ToggleBpmUpDown; editor.StateChanged += ToggleBpmDisplay; editor.BeatmapSwitched += UpdateSongDisplay; editor.BeatmapModified += UpdateBpmDisplay; editor.BeatmapModified += UpdateHpCsArOdDisplay; editor.BeatmapModified += UpdateDifficultyDisplay; editor.BeatmapModified += ToggleGenerateButton; editor.BeatmapModified += UpdateBpmUpDown; editor.ControlsModified += UpdateLockButtons; editor.ControlsModified += UpdateScaleButtons; editor.ControlsModified += UpdateChanGePitchButton; // need controls to show up as initially disabled editor.ForceEventStateChanged(); editor.ForceEventBeatmapSwitched(); editor.ForceEventControlsModified(); BeatmapUpdateTimer.Start(); OsuRunningTimer.Start(); }
public FirstRunMemoryCalibration(IOsuMemoryReader reader, ISettingsHandler settings) { memoryReader = reader; _settings = settings; InitializeComponent(); this.pictureBox1.Image = GetStreamCompanionLogo(); _settings.Add(_names.EnableMemoryScanner.Name, false); _settings.Add(_names.EnableMemoryPooling.Name, false); CurrentMap = _maps[rnd.Next(0, _maps.Count)]; }
public Form1(string osuWindowTitleHint) { _osuWindowTitleHint = osuWindowTitleHint; InitializeComponent(); #pragma warning disable CS0618 // Type or member is obsolete _reader = OsuMemoryReader.Instance.GetInstanceForWindowTitleHint(osuWindowTitleHint); #pragma warning restore CS0618 // Type or member is obsolete _sreader = StructuredOsuMemoryReader.Instance.GetInstanceForWindowTitleHint(osuWindowTitleHint); Shown += OnShown; Closing += OnClosing; numericUpDown_readDelay.ValueChanged += NumericUpDownReadDelayOnValueChanged; }
public void Tick(IOsuMemoryReader reader, bool sendEvents) { _currentStatus = reader.GetCurrentStatus(out _); if (_lastStatusLog != _currentStatus) { _lastStatusLog = _currentStatus; //Console.WriteLine("status: {0} {1}", _currentStatus, _currentStatus == OsuMemoryStatus.Unknown ? num.ToString() : ""); } if (_currentStatus != OsuMemoryStatus.NotRunning) { _currentMapId = reader.GetMapId(); _currentMapString = reader.GetSongString(); OsuStatus status = _currentStatus.Convert(); var gameMode = reader.ReadSongSelectGameMode(); var mapHash = reader.GetMapMd5Safe(); var mapSelectionMods = reader.GetMods(); var mapHashDiffers = mapHash != null && _lastMapHash != null && _lastMapHash != mapHash; if (sendEvents && (_lastMapId != _currentMapId || _lastStatus != _currentStatus || _currentMapString != _lastMapString || gameMode != _lastGameMode || mapSelectionMods != _lastMapSelectionMods || mapHashDiffers) ) { _lastMapId = _currentMapId; _lastStatus = _currentStatus; _lastMapString = _currentMapString; _lastGameMode = gameMode; _lastMapSelectionMods = mapSelectionMods; _lastMapHash = mapHash; NewOsuEvent?.Invoke(this, new MapSearchArgs("OsuMemory") { MapId = _currentMapId, Status = status, Raw = _currentMapString, MapHash = mapHash, PlayMode = (PlayMode)gameMode, }); } _memoryDataProcessor.Tick(status, reader); } }
public OsuMemoryEventSourceBase(IContextAwareLogger logger, ISettings settings, IDatabaseController databaseControler, IModParser modParser, List <IHighFrequencyDataConsumer> highFrequencyDataConsumers, ISaver saver) { _settings = settings; _databaseController = databaseControler; _modParser = modParser; _highFrequencyDataConsumers = highFrequencyDataConsumers; Logger = logger; LiveTokenSetter = Tokens.CreateTokenSetter(Name); TokenSetter = Tokens.CreateTokenSetter($"{Name}-Regular"); _memoryReader = OsuMemoryReader.Instance; _settings.SettingUpdated += OnSettingsSettingUpdated; bool isFallback = _settings.Get <bool>(_names.OsuFallback); bool memoryScannerIsEnabled = _settings.Get <bool>(_names.EnableMemoryScanner); MemoryPoolingIsEnabled = _settings.Get <bool>(_names.EnableMemoryPooling); _poolingMsDelay = _settings.Get <int>(_names.MemoryPoolingFrequency); if (!memoryScannerIsEnabled) { return; } if (isFallback) { _settings.Add(_names.EnableMemoryScanner.Name, false); return; } lock (_lockingObject) _timer = new Timer(TimerCallback, null, 250, Int32.MaxValue); _memoryListener = new MemoryListener(settings, saver, logger); _memoryListener.NewOsuEvent += async(s, args) => { while (NewOsuEvent == null) { await Task.Delay(5); } NewOsuEvent.Invoke(this, args); }; _memoryListener.SetHighFrequencyDataHandlers(_highFrequencyDataConsumers); Started = true; }
public void Tick(OsuStatus status, IOsuMemoryReader reader) { lock (_lockingObject) { _tokenCallbackTick.WaitOne(); if (!ReferenceEquals(_reader, reader)) { _reader = reader; } liveTokens["status"].Value = _lastStatus; if (status != OsuStatus.Playing) { if (_clearLiveTokensAfterResultScreenExit && !_clearedLiveTokens && (status & OsuStatus.ResultsScreen) == 0) {//we're not playing or we haven't just finished playing - clear ResetOutput(); ResetTokens(); _lastStatus = status; _clearedLiveTokens = true; } _rawData.PlayTime = reader.ReadPlayTime(); PrepareTimeToken(); return; } if (_lastStatus != OsuStatus.Playing) { Thread.Sleep(500);//Initial play delay } _clearedLiveTokens = false; _lastStatus = status; reader.GetPlayData(_rawData.Play); _rawData.HitErrors = reader.HitErrors() ?? new List <int>(); _rawData.PlayTime = reader.ReadPlayTime(); PrepareTimeToken(); _tokenTick?.Set(); } }
public void Tick(OsuStatus status, IOsuMemoryReader reader) { _notUpdatingTokens.WaitOne(); _notUpdatingMemoryValues.Reset(); lock (_lockingObject) { if (!ReferenceEquals(_reader, reader)) { _reader = reader; } if ((OsuStatus)_liveTokens["status"].Token.Value != status) { _liveTokens["status"].Token.Value = status; } if (status != OsuStatus.Playing && status != OsuStatus.Watching) { _rawData.PlayTime = reader.ReadPlayTime(); UpdateLiveTokens(status); _lastStatus = status; _notUpdatingMemoryValues.Set(); return; } if (_lastStatus != OsuStatus.Playing && _lastStatus != OsuStatus.Watching) { _newPlayStarted.Set(); Thread.Sleep(500);//Initial play delay } reader.GetPlayData(_rawData.Play); //TODO: change this on OsuMemoryReader side (read v2 in getPlayData & return 0 as default instead of -1) _rawData.Play.Score = Math.Max(0, _reader.ReadScoreV2()); _rawData.HitErrors = reader.HitErrors() ?? new List <int>(); _rawData.PlayTime = reader.ReadPlayTime(); _liveTokens["time"].Update(); _lastStatus = status; } _notUpdatingMemoryValues.Set(); }
public void Tick(OsuStatus status, IOsuMemoryReader reader) { lock (_lockingObject) { PrepareTimeToken(reader.ReadPlayTime()); if (status != OsuStatus.Playing) { if (_clearLiveTokensAfterResultScreenExit && !_clearedLiveTokens && (status & OsuStatus.ResultsScreen) == 0) {//we're not playing or we haven't just finished playing - clear ResetOutput(); ResetTokens(); _lastStatus = status; _clearedLiveTokens = true; } return; } if (_lastStatus != OsuStatus.Playing) { Thread.Sleep(500);//Initial play delay //var readGamemode = reader.ReadPlayedGameMode(); //var playMode = (PlayMode) (Enum.IsDefined(typeof(PlayMode), readGamemode) ? readGamemode : 0); //_rawData.SetPlayMode(playMode); } _clearedLiveTokens = false; _lastStatus = status; reader.GetPlayData(_rawData.Play); PrepareLiveTokens(); SendData(); } }
public void Tick(OsuStatus status, IOsuMemoryReader reader) { lock (_lockingObject) { _tokenCallbackTick.WaitOne(); if (!ReferenceEquals(_reader, reader)) { _reader = reader; } if ((OsuStatus)_liveTokens["status"].Token.Value != status) { _liveTokens["status"].Token.Value = status; } if (status != OsuStatus.Playing) { _rawData.PlayTime = reader.ReadPlayTime(); UpdateLiveTokens(status); _lastStatus = status; return; } if (_lastStatus != OsuStatus.Playing) { Thread.Sleep(500);//Initial play delay } reader.GetPlayData(_rawData.Play); _rawData.HitErrors = reader.HitErrors() ?? new List <int>(); _rawData.PlayTime = reader.ReadPlayTime(); _liveTokens["time"].Update(); _tokenTick?.Set(); _lastStatus = status; } }
public OsuDataProvider(ISettings settings, IOsuDataService osuDataService) { this.settings = settings; this.osuDataService = osuDataService; this.reader = OsuMemoryReader.Instance; }
public void Tick(IOsuMemoryReader reader, bool sendEvents) { _currentStatus = reader.GetCurrentStatus(out _); if (_lastStatusLog != _currentStatus) { _lastStatusLog = _currentStatus; //Console.WriteLine("status: {0} {1}", _currentStatus, _currentStatus == OsuMemoryStatus.Unknown ? num.ToString() : ""); } if (_currentStatus != OsuMemoryStatus.NotRunning) { _currentMapId = reader.GetMapId(); var isReplay = reader.IsReplay(); OsuStatus status = _currentStatus.Convert(); status = status == OsuStatus.Playing && isReplay ? OsuStatus.Watching : status; var gameMode = reader.ReadSongSelectGameMode(); var mapHash = reader.GetMapMd5Safe(); var mapSelectionMods = reader.GetMods(); var playingMods = status == OsuStatus.Playing || status == OsuStatus.Watching ? reader.GetPlayingMods() : -1; var retries = reader.GetRetrys(); var currentTime = reader.ReadPlayTime(); var mapHashDiffers = mapHash != null && _lastMapHash != null && _lastMapHash != mapHash; var mapIdDiffers = _lastMapId != _currentMapId; var memoryStatusDiffers = _lastStatus != _currentStatus; var gameModeDiffers = gameMode != _lastGameMode; var mapSelectionModsDiffer = mapSelectionMods != _lastMapSelectionMods; var playingModsDiffer = (status == OsuStatus.Watching || status == OsuStatus.Playing) && playingMods != _lastPlayingMods; OsuEventType?osuEventType = null; //"good enough" replay retry detection. if (isReplay && _currentStatus == OsuMemoryStatus.Playing && _lastTime > currentTime && DateTime.UtcNow > _nextReplayRetryAllowedAt) { osuEventType = OsuEventType.PlayChange; _nextReplayRetryAllowedAt = DateTime.UtcNow.AddMilliseconds(500); } _lastTime = currentTime; var playInitialized = (status != OsuStatus.Watching && status != OsuStatus.Playing) || playingMods != -1; if (sendEvents && playInitialized && ( osuEventType.HasValue || mapIdDiffers || memoryStatusDiffers || mapHashDiffers || gameModeDiffers || mapSelectionModsDiffer || retries != _lastRetries ) ) { if (!osuEventType.HasValue || playingModsDiffer) { osuEventType = mapIdDiffers || mapHashDiffers || gameModeDiffers || mapSelectionModsDiffer || playingModsDiffer ? OsuEventType.MapChange //different mapId/hash/mode/mods(changed stats) = different map : memoryStatusDiffers ? OsuEventType.SceneChange //memory scene(status) change = Scene change : _currentStatus == OsuMemoryStatus.Playing ? OsuEventType.PlayChange // map retry : OsuEventType.MapChange; //bail } _lastMapId = _currentMapId; _lastStatus = _currentStatus; _lastRetries = retries; _lastGameMode = gameMode; _lastMapSelectionMods = mapSelectionMods; _lastMapHash = mapHash; _lastPlayingMods = playingMods; NewOsuEvent?.Invoke(this, new MapSearchArgs("OsuMemory", osuEventType.Value) { MapId = _currentMapId, Status = status, Raw = reader.GetSongString(), MapHash = mapHash, PlayMode = (PlayMode)gameMode, }); } _memoryDataProcessor.Tick(status, reader); } }
public MainForm() { Directory.SetCurrentDirectory(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)); InitializeComponent(); Height = 493; // init control lists dumbLabels = new List <Label> { hplabel, cslabel, arlabel, odlabel, BpmMultiplierLabel, OriginalBpmLabel, NewBpmLabel }; diffDisplays = new List <TextBox> { HPDisplay, CSDisplay, ARDisplay, ODDisplay }; diffSliders = new List <OptionSlider> { HPSlider, CSSlider, ARSlider, ODSlider }; checkControls = new List <OsuCheckBox> { NoSpinnersCheck, HRCheck, ScaleARCheck, ScaleODCheck, ChangePitchCheck, highQualityMp3Check }; ApplyFonts(); // load user settings if (Directory.Exists(Properties.Settings.Default.SongsFolder)) { userSongsFolder = Properties.Settings.Default.SongsFolder; } // load hotkeys Hotkeys = new List <Keys>(); Hotkeys.Add(Properties.Settings.Default.HotkeyCreateMap); Hotkeys.Add(Properties.Settings.Default.HotkeyProfile1); Hotkeys.Add(Properties.Settings.Default.HotkeyProfile2); Hotkeys.Add(Properties.Settings.Default.HotkeyProfile3); Hotkeys.Add(Properties.Settings.Default.HotkeyProfile4); // Init object instances osuReader = OsuMemoryReader.Instance.GetInstanceForWindowTitleHint(""); editor = new BeatmapEditor(this); // Add event handlers (observers) editor.StateChanged += ToggleDumbLabels; editor.StateChanged += TogglePrettyButtons; editor.StateChanged += ToggleHpCsArOdDisplay; editor.StateChanged += ToggleBpmInputControls; editor.StateChanged += ToggleBpmDisplay; editor.StateChanged += ToggleLockButtons; editor.StateChanged += UpdateProfiles; middlePanel.MaximumSize = new Size(999, 999); BottomPanel.MaximumSize = new Size(999, 999); editor.StateChanged += RearrangeLayout; editor.BeatmapSwitched += UpdateSongDisplay; editor.BeatmapModified += UpdateBpmDisplay; editor.BeatmapModified += UpdateHpCsArOdDisplay; editor.BeatmapModified += UpdateDifficultyDisplay; editor.BeatmapModified += TogglePrettyButtons; editor.BeatmapModified += UpdateRateInputControls; editor.ControlsModified += UpdateLockButtons; editor.ControlsModified += UpdateCheckBoxes; editor.ControlsModified += UpdateProfiles; // Install keyboard hooks // Notice: The only purpose of the keyboard hook is for shortcuts. Nothing else! ApplyHotkeys(); // need controls to show up as initially disabled editor.ForceEventStateChanged(); editor.ForceEventBeatmapSwitched(); editor.ForceEventControlsModified(); BeatmapUpdateTimer.Start(); OsuRunningTimer.Start(); formAnimationTimer.Start(); Focus(); #if DEBUG //spectrogramButton_Click(this, EventArgs.Empty); #endif }
public static string GetMapMd5Safe(this IOsuMemoryReader reader) { var mapHash = reader.GetMapMd5(); return(Helpers.IsMD5(mapHash) ? mapHash : null); }
//[DllImport("kernel32.dll", SetLastError = true)] //[return: MarshalAs(UnmanagedType.Bool)] //static extern bool AllocConsole(); #endregion public MainForm() { InitializeComponent(); nobg = Image.FromFile(nobgpng); // init control lists dumbLabels = new List <Label> { hplabel, cslabel, arlabel, odlabel, BpmMultiplierLabel, OriginalBpmLabel, NewBpmLabel }; diffDisplays = new List <TextBox> { HPDisplay, CSDisplay, ARDisplay, ODDisplay }; diffSliders = new List <OptionSlider> { HPSlider, CSSlider, ARSlider, ODSlider }; checkControls = new List <OsuCheckBox> { NoSpinnersCheck, HRCheck, ScaleARCheck, ScaleODCheck, ChangePitchCheck }; ApplyFonts(); // load user settings if (Directory.Exists(Properties.Settings.Default.SongsFolder)) { userSongsFolder = Properties.Settings.Default.SongsFolder; } // Init object instances osuReader = OsuMemoryReader.Instance.GetInstanceForWindowTitleHint(""); editor = new BeatmapEditor(this); // Add event handlers (observers) editor.StateChanged += ToggleDumbLabels; editor.StateChanged += TogglePrettyButtons; editor.StateChanged += ToggleHpCsArOdDisplay; editor.StateChanged += ToggleDifficultyDisplay; editor.StateChanged += ToggleBpmInputControls; editor.StateChanged += ToggleBpmDisplay; editor.StateChanged += ToggleLockButtons; editor.BeatmapSwitched += UpdateSongDisplay; editor.BeatmapModified += UpdateBpmDisplay; editor.BeatmapModified += UpdateHpCsArOdDisplay; editor.BeatmapModified += UpdateDifficultyDisplay; editor.BeatmapModified += TogglePrettyButtons; editor.BeatmapModified += UpdateRateInputControls; editor.ControlsModified += UpdateLockButtons; editor.ControlsModified += UpdateChecks; // need controls to show up as initially disabled editor.ForceEventStateChanged(); editor.ForceEventBeatmapSwitched(); editor.ForceEventControlsModified(); // Install keyboard hooks // (note! this is only for the create map hotkey!!) kbhook.HookedKeys.Add(Keys.X); kbhook.KeyDown += new KeyEventHandler(CreateMapHotkeyHandler); BeatmapUpdateTimer.Start(); OsuRunningTimer.Start(); this.Focus(); }