public void MediaPlayerAction(MetaData metaData, LaunchControl action) { VideoDetails videoOrPptDetails = VideoCollection.Find(x => x.Id == metaData.VideoId); if (videoOrPptDetails != null) { switch (action) { case LaunchControl.Launch: case LaunchControl.Play: mediaPlayer.PlayVideo(videoOrPptDetails); break; case LaunchControl.PlayAfterPause: mediaPlayer.PlayAfterPauseVideo(); break; case LaunchControl.Pause: mediaPlayer.PauseVideo(); break; case LaunchControl.Stop: mediaPlayer.StopVideo(); break; } } else { MessageBox.Show("Media Not Found"); } }
private void PlayVideo(int videoId) { launchControl = LaunchControl.Play; client.AdminCommandsAsync(launchControl, new MetaData() { VideoId = videoId }); }
protected void btn_video_play_Click(object sender, EventArgs e) { launchControl = LaunchControl.PlayAfterPause; client.AdminCommandsAsync(launchControl, new MetaData() { VideoId = 1 }); }
protected void btn_stop_Click(object sender, EventArgs e) { launchControl = LaunchControl.Stop; client.AdminCommandsAsync(launchControl, new MetaData() { VideoId = 1 }); }
void Update() { if (!_inited && TemplatePool.Instance.HasBuilt) { _inited = true; LogManager.Log("TableInit..........OK"); LaunchControl.NextSection(this); } }
private void RecordLaunchInfo(string serverName, string accountName, string desiredCharacter, DateTime timestampUtc) { LaunchControl.RecordLaunchInfo(serverName: serverName, accountName: accountName, characterName: desiredCharacter, timestampUtc: timestampUtc); // TODO var x = LaunchControl.DebugGetLaunchInfo(); // verify x }
protected void btn_launch_Click(object sender, EventArgs e) { launchControl = LaunchControl.Launch; client.AdminCommandsAsync(launchControl, new MetaData() { VideoId = 0, Interval = ConfigurationManager.AppSettings["defaultTimeInterval"] }); }
protected void btn_timeJump_Click(object sender, EventArgs e) { launchControl = LaunchControl.Hop; client.AdminCommandsAsync(launchControl, new MetaData() { VideoId = 1, Interval = "2" }); }
protected void StopListen_Click(object sender, EventArgs e) { launchControl = LaunchControl.StopListen; client.AdminCommandsAsync(launchControl, new MetaData() { //dummy not using these VideoId = 0, Interval = ConfigurationManager.AppSettings["defaultTimeInterval"] }); }
public void LaunchToggle(LaunchControl control, MetaData metaData) { switch (control) { case LaunchControl.Play: { callback.PlayVideo(metaData, control); break; } case LaunchControl.Stop: case LaunchControl.Pause: case LaunchControl.Hop: case LaunchControl.Start: default: { callback.MyMethod(control, metaData); break; } } }
public void AdminCommand(LaunchControl control) { if (control == LaunchControl.Launch) { MetaData metaData = new MetaData(); metaData.VideoId = 0; metaData.Interval = "0"; PlayVideo(metaData, control); } if (control == LaunchControl.PlayAfterPause) { MetaData metaData = new MetaData(); metaData.VideoId = 0; metaData.Interval = "0"; PlayVideo(metaData, control); } if (control == LaunchControl.Listen) { // mediaPlayer.StartListening(); } if (control == LaunchControl.StopListen) { mediaPlayer.StopListening(); } if (control == LaunchControl.Pause) { MetaData metaData = new MetaData(); metaData.VideoId = 0; PlayVideo(metaData, control); } if (control == LaunchControl.Stop) { MetaData metaData = new MetaData(); metaData.VideoId = 0; metaData.Interval = "0"; PlayVideo(metaData, control); } }
protected override void Awake() { //toolbar if (ToolbarManager.ToolbarAvailable) { _toolbarItem = AddComponent <LaunchCountDownToolbar>(); } Visible = !ToolbarManager.ToolbarAvailable; if (LaunchCountdownConfig.Instance.Info.IsLoaded) { WindowRect = LaunchCountdownConfig.Instance.Info.WindowPosition; } else { WindowRect = new Rect(0, 0, 459, 120); WindowRect.CenterScreen(); } WindowStyle = StyleFactory.MainWindowStyle; _launchSequenceWindow = AddComponent <LaunchSequenceWindow>(); _launchSequenceWindow.WindowStyle = StyleFactory.LaunchSequenceStyle; _launchSequenceWindow.OnClosed += WindowOnClosed; _settingsWindow = AddComponent <SettingsWindow>(); _settingsWindow.WindowStyle = StyleFactory.SettingsStyle; _settingsWindow.OnClosed += WindowOnClosed; _launcher = AddComponent <LaunchControl>(); _launcher.OnTick += _launcher_OnTick; _launcher.OnVesselLaunched += _launcher_OnVesselLaunched; _launcher.OnVesselAborted += _launcher_OnVesselAborted; LaunchCountdownConfig.Instance.Info.OnChanged += Instance_OnChanged; }
public GameLaunchResult LaunchGameClient(string exelocation, string serverName, string accountName, string password, string ipAddress, ServerModel.ServerEmuEnum emu, string desiredCharacter, ServerModel.RodatEnum rodatSetting, bool simpleLaunch) { var result = new GameLaunchResult(); //-username "MyUsername" -password "MyPassword" -w "ServerName" -2 -3 if (string.IsNullOrWhiteSpace(exelocation)) { throw new Exception("Empty exelocation"); } if (!File.Exists(exelocation)) { throw new Exception("Missing exe: " + exelocation); } if (string.IsNullOrWhiteSpace(serverName)) { throw new Exception("Empty serverName"); } if (string.IsNullOrWhiteSpace(accountName)) { throw new Exception("Empty accountName"); } string arg1 = accountName; string arg2 = password; string genArgs = "TODO-below"; bool isPhat = (emu == ServerModel.ServerEmuEnum.Phat); if (isPhat) { //PHATAC //-h [server ip] -p [server port] -a username:password -rodat off int tok = ipAddress.IndexOf(':'); if (tok < 0) { throw new Exception("Phat address missing colon in username:password specification"); } string ip = ipAddress.Substring(0, tok); string port = ipAddress.Substring(tok + 1); string genArgsPhatServer; if (rodatSetting == ServerModel.RodatEnum.On) { genArgsPhatServer = "-h " + ip + " -p " + port + " -a " + arg1 + ":" + arg2 + " -rodat on"; } else { genArgsPhatServer = "-h " + ip + " -p " + port + " -a " + arg1 + ":" + arg2 + " -rodat off"; } genArgs = genArgsPhatServer; } else { //ACE //acclient.exe -a testaccount -h 127.0.0.1:9000 -glsticketdirect testpassword string genArgsACEServer = "-a " + accountName + " -h " + ipAddress + " -glsticketdirect " + arg2; genArgs = genArgsACEServer; } string pathToFile = exelocation; //check if we're doing a simple launch. If we are, ignore the fancy management stuff bool gameReady = false; if (simpleLaunch) { gameReady = true; } Process launcherProc = null; LaunchControl.LaunchResponse launchResponse = null; try { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = pathToFile; startInfo.Arguments = genArgs; startInfo.CreateNoWindow = true; RecordLaunchInfo(serverName, accountName, desiredCharacter, DateTime.UtcNow); string charFilepath = MagFilter.FileLocations.GetCharacterFilePath(); string launchResponseFilepath = MagFilter.FileLocations.GetCurrentLaunchResponseFilePath(); DateTime startWait = DateTime.UtcNow; DateTime characterFileWrittenTime = DateTime.MaxValue; DateTime loginTime = DateTime.MaxValue; startInfo.WorkingDirectory = Path.GetDirectoryName(startInfo.FileName); if (ShouldWeUseDecal(simpleLaunch)) { //Start Process with Decal Injection string commandLineLaunch = startInfo.FileName + " " + startInfo.Arguments; string decalInjectPath = DecalInjection.GetDecalLocation(); string command = "DecalStartup"; string asheronFolder = startInfo.WorkingDirectory; launcherProc = Process.GetProcessById(Convert.ToInt32(LaunchInjected(commandLineLaunch, asheronFolder, decalInjectPath, command))); } else { //Start Process without Decal launcherProc = Process.Start(startInfo); } Logger.WriteInfo(string.Format("PID = {0}", launcherProc.Id)); launcherProc.EnableRaisingEvents = true; launcherProc.Exited += LauncherProc_Exited; if (!gameReady) { WaitForLauncher(launcherProc); int secondsTimeout = ConfigSettings.GetConfigInt("LauncherGameTimeoutSeconds", 120); TimeSpan timeout = new TimeSpan(0, 0, 0, secondsTimeout); while (!gameReady && (DateTime.UtcNow - startWait < timeout)) { if (CheckForStop()) { // User canceled if (!launcherProc.HasExited) { launcherProc.Kill(); } return(result); } ReportGameStatus(string.Format("Waiting for game: {0}/{1} sec", (int)((DateTime.UtcNow - startWait).TotalSeconds), secondsTimeout)); System.Threading.Thread.Sleep(1000); if (characterFileWrittenTime == DateTime.MaxValue) { // First we wait until DLL writes character file FileInfo fileInfo = new FileInfo(charFilepath); if (fileInfo.LastWriteTime.ToUniversalTime() >= startWait) { characterFileWrittenTime = DateTime.UtcNow; } } else if (loginTime == DateTime.MaxValue) { // Now we wait until DLL logs in or user logs in interactively FileInfo fileInfo = new FileInfo(launchResponseFilepath); if (fileInfo.LastWriteTime.ToUniversalTime() >= startWait) { loginTime = DateTime.UtcNow; TimeSpan maxLatency = DateTime.UtcNow - startWait; launchResponse = LaunchControl.GetLaunchResponse(maxLatency); } else { if (string.IsNullOrEmpty(desiredCharacter)) { Logger.WriteDebug("Game Launcher waiting for launch response and desiredCharacter is empty, file time {0} and startWait {1}", fileInfo.LastWriteTime.ToUniversalTime(), startWait); } } } else { // Then we give it 6 more seconds to complete login int loginTimeSeconds = ConfigSettings.GetConfigInt("LauncherGameLoginTime", 0); if (DateTime.UtcNow >= characterFileWrittenTime.AddSeconds(loginTimeSeconds)) { gameReady = true; } } } } } catch (Exception exc) { throw new Exception(string.Format( "Failed to launch program. Check path '{0}': {1}", exelocation, exc.Message)); } if (!gameReady) { if (launcherProc != null && !launcherProc.HasExited) { launcherProc.Kill(); } } if (launchResponse != null && launchResponse.IsValid) { result.Success = gameReady; result.ProcessId = launchResponse.ProcessId; } if (simpleLaunch) { result.Success = true; } return(result); }
public GameLaunchResult LaunchGameClient(string exelocation, string serverName, string accountName, string password, string ipAddress, string gameApiUrl, string loginServerUrl, string discordurl, ServerModel.ServerEmuEnum emu, string desiredCharacter, ServerModel.RodatEnum rodatSetting, ServerModel.SecureEnum secureSetting, bool simpleLaunch) { var result = new GameLaunchResult(); //-username "MyUsername" -password "MyPassword" -w "ServerName" -2 -3 if (string.IsNullOrWhiteSpace(exelocation)) { throw new Exception("Empty exelocation"); } if (!File.Exists(exelocation)) { throw new Exception("Missing exe: " + exelocation); } if (string.IsNullOrWhiteSpace(serverName)) { throw new Exception("Empty serverName"); } if (string.IsNullOrWhiteSpace(accountName)) { throw new Exception("Empty accountName"); } string genArgs = "TODO-below"; bool isGDLE = (emu == ServerModel.ServerEmuEnum.GDLE); bool isACE = (emu == ServerModel.ServerEmuEnum.ACE); if (isGDLE) { //GDL //-h [server ip] -p [server port] -a username:password -rodat off int tok = ipAddress.IndexOf(':'); if (tok < 0) { throw new Exception("GDL address missing colon in username:password specification"); } string ip = ipAddress.Substring(0, tok); string port = ipAddress.Substring(tok + 1); string genArgsGDLEServer; if (rodatSetting == ServerModel.RodatEnum.On) { genArgsGDLEServer = "-h " + ip + " -p " + port + " -a " + accountName + ":" + password + " -rodat on"; } else { genArgsGDLEServer = "-h " + ip + " -p " + port + " -a " + accountName + ":" + password + " -rodat off"; } genArgs = genArgsGDLEServer; } else if (isACE) { //ACE //acclient.exe -a testaccount -v testpassword -h 127.0.0.1:9000 //-a accountName -v password -h ipaddress string genArgsACEServer = "-a " + accountName + " -v " + password + " -h " + ipAddress; genArgs = genArgsACEServer; } /* This is currently removed, and DF is gone. Leaving this in case anyone else decides to use the secure login from DF * else if(isDF) * { * if (secureSetting == ServerModel.SecureEnum.On) * { * var loginInfo = SecureLogin(accountName: accountName, password: password, gameApiUrl: gameApiUrl, loginServerUrl: loginServerUrl); * password = loginInfo.JwtToken; * accountName = loginInfo.SubscriptionId; * * } * //DF * //acclient.exe -a testaccount -h 127.0.0.1:9000 -glsticketdirect testpassword * string genArgsACEServer = "-a " + accountName + " -h " + ipAddress + " -glsticketdirect " + password; * genArgs = genArgsACEServer; * } */ string pathToFile = exelocation; //check if we're doing a simple launch. If we are, ignore the fancy management stuff bool gameReady = false; if (simpleLaunch) { gameReady = true; } Process launcherProc = null; LaunchControl.LaunchResponse launchResponse = null; try { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = pathToFile; startInfo.Arguments = genArgs; startInfo.CreateNoWindow = true; RecordLaunchInfo(serverName, accountName, desiredCharacter, DateTime.UtcNow); string charFilepath = ThwargFilter.FileLocations.GetCharacterFilePath(ServerName: serverName, AccountName: accountName); string launchResponseFilepath = ThwargFilter.FileLocations.GetCurrentLaunchResponseFilePath(ServerName: serverName, AccountName: accountName); DateTime startWait = DateTime.UtcNow; DateTime characterFileWrittenTime = DateTime.MaxValue; DateTime loginTime = DateTime.MaxValue; startInfo.WorkingDirectory = Path.GetDirectoryName(startInfo.FileName); if (ShouldWeUseDecal(simpleLaunch)) { //Start Process with Decal Injection string commandLineLaunch = startInfo.FileName + " " + startInfo.Arguments; string decalInjectPath = DecalInjection.GetDecalLocation(); string command = "DecalStartup"; string asheronFolder = startInfo.WorkingDirectory; launcherProc = Process.GetProcessById(Convert.ToInt32(LaunchInjected(commandLineLaunch, asheronFolder, decalInjectPath, command))); } else { //Start Process without Decal launcherProc = Process.Start(startInfo); } Logger.WriteInfo(string.Format("PID = {0}", launcherProc.Id)); // record process id of the process we just launched, which hopefully will be the game process result.ProcessId = launcherProc.Id; launcherProc.EnableRaisingEvents = true; launcherProc.Exited += LauncherProc_Exited; if (!gameReady) { WaitForLauncher(launcherProc); int secondsTimeout = ConfigSettings.GetConfigInt("LauncherGameTimeoutSeconds", 120); TimeSpan timeout = new TimeSpan(0, 0, 0, secondsTimeout); while (!gameReady && (DateTime.UtcNow - startWait < timeout)) { if (CheckForStop()) { // User canceled if (!launcherProc.HasExited) { if (!Globals.NeverKillClients) { launcherProc.Kill(); } } return(result); } ReportGameStatusWaiting(string.Format("Waiting for game: {0}/{1} sec", (int)((DateTime.UtcNow - startWait).TotalSeconds), secondsTimeout)); if (loginTime == DateTime.MaxValue) { // Now we wait until DLL logs in or user logs in interactively FileInfo fileInfo = new FileInfo(launchResponseFilepath); if (fileInfo.LastWriteTime.ToUniversalTime() >= startWait) { loginTime = DateTime.UtcNow; TimeSpan maxLatency = DateTime.UtcNow - startWait; launchResponse = LaunchControl.GetLaunchResponse(ServerName: serverName, AccountName: accountName, maxLatency: maxLatency); } } else if (characterFileWrittenTime == DateTime.MaxValue) { // First we wait until DLL writes character file FileInfo fileInfo = new FileInfo(charFilepath); if (fileInfo.LastWriteTime.ToUniversalTime() >= startWait) { characterFileWrittenTime = DateTime.UtcNow; } } else { // Then we give it 6 more seconds to complete login int loginTimeSeconds = ConfigSettings.GetConfigInt("LauncherGameLoginTime", 0); if (DateTime.UtcNow >= characterFileWrittenTime.AddSeconds(loginTimeSeconds)) { gameReady = true; } } System.Threading.Thread.Sleep(1000); } } } catch (Exception exc) { throw new Exception(string.Format( "Failed to launch program. Check path '{0}': {1}", exelocation, exc.Message)); } if (!gameReady) { if (launcherProc != null && !launcherProc.HasExited) { if (DecalInjection.IsThwargFilterRegistered()) { if (!Globals.NeverKillClients) { if (launchResponse == null) { var msg = string.Format("Killing game because launch failed, server requested='{0}', no launch response", serverName); Logger.WriteInfo(msg); } else { var msg = string.Format("Killing game because launch failed, process: {0}, server requested='{1}', server reported='{2}'", launchResponse.ProcessId, serverName, launchResponse.ServerNameReported); Logger.WriteInfo(msg); } launcherProc.Kill(); } } } } if (launchResponse != null && launchResponse.IsValid) { // Record process id of launch response // Probably the process we launched, but could be a new process if we called something that spawned the game result.Success = gameReady; result.ProcessId = launchResponse.ProcessId; result.ServerNameReported = launchResponse.ServerNameReported; } if (simpleLaunch) { result.Success = true; } return(result); }
public void MyMethod(LaunchControl launchControl) { //throw new NotImplementedException(); }
public void PlayVideo(MetaData metaData, LaunchControl control) { //throw new NotImplementedException(); }
public void AdminCommand(LaunchControl control) { throw new NotImplementedException(); }
protected void btn_launch_Click(object sender, EventArgs e) { toggleState = client.LaunchToggle(toggleState); toggleLaunch(); }
public void PlayVideo(MetaData metaData, LaunchControl control) { Application.Current.Dispatcher.InvokeAsync(() => { MediaPlayerAction(metaData, control); }); }