예제 #1
0
        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");
            }
        }
예제 #2
0
 private void PlayVideo(int videoId)
 {
     launchControl = LaunchControl.Play;
     client.AdminCommandsAsync(launchControl, new MetaData()
     {
         VideoId = videoId
     });
 }
예제 #3
0
 protected void btn_video_play_Click(object sender, EventArgs e)
 {
     launchControl = LaunchControl.PlayAfterPause;
     client.AdminCommandsAsync(launchControl, new MetaData()
     {
         VideoId = 1
     });
 }
예제 #4
0
 protected void btn_stop_Click(object sender, EventArgs e)
 {
     launchControl = LaunchControl.Stop;
     client.AdminCommandsAsync(launchControl, new MetaData()
     {
         VideoId = 1
     });
 }
예제 #5
0
 void Update()
 {
     if (!_inited && TemplatePool.Instance.HasBuilt)
     {
         _inited = true;
         LogManager.Log("TableInit..........OK");
         LaunchControl.NextSection(this);
     }
 }
예제 #6
0
        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
        }
예제 #7
0
 protected void btn_launch_Click(object sender, EventArgs e)
 {
     launchControl = LaunchControl.Launch;
     client.AdminCommandsAsync(launchControl, new MetaData()
     {
         VideoId  = 0,
         Interval = ConfigurationManager.AppSettings["defaultTimeInterval"]
     });
 }
예제 #8
0
 protected void btn_timeJump_Click(object sender, EventArgs e)
 {
     launchControl = LaunchControl.Hop;
     client.AdminCommandsAsync(launchControl, new MetaData()
     {
         VideoId  = 1,
         Interval = "2"
     });
 }
예제 #9
0
 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"]
     });
 }
예제 #10
0
        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;
            }
            }
        }
예제 #11
0
 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;
        }
예제 #13
0
        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);
        }
예제 #14
0
        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);
        }
예제 #15
0
 public void MyMethod(LaunchControl launchControl)
 {
     //throw new NotImplementedException();
 }
예제 #16
0
 public void PlayVideo(MetaData metaData, LaunchControl control)
 {
     //throw new NotImplementedException();
 }
예제 #17
0
 public void AdminCommand(LaunchControl control)
 {
     throw new NotImplementedException();
 }
예제 #18
0
 protected void btn_launch_Click(object sender, EventArgs e)
 {
     toggleState = client.LaunchToggle(toggleState);
     toggleLaunch();
 }
예제 #19
0
 public void PlayVideo(MetaData metaData, LaunchControl control)
 {
     Application.Current.Dispatcher.InvokeAsync(() => { MediaPlayerAction(metaData, control); });
 }