本文整理汇总了Python中lutris.thread.LutrisThread.stop方法的典型用法代码示例。如果您正苦于以下问题:Python LutrisThread.stop方法的具体用法?Python LutrisThread.stop怎么用?Python LutrisThread.stop使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类lutris.thread.LutrisThread
的用法示例。
在下文中一共展示了LutrisThread.stop方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Game
# 需要导入模块: from lutris.thread import LutrisThread [as 别名]
# 或者: from lutris.thread.LutrisThread import stop [as 别名]
#.........这里部分代码省略.........
def play(self):
""" Launch the game. """
if not self.prelaunch():
return False
gameplay_info = self.runner.play()
logger.debug("Launching %s: %s" % (self.name, gameplay_info))
if isinstance(gameplay_info, dict):
if 'error' in gameplay_info:
show_error_message(gameplay_info)
return False
launch_arguments = gameplay_info['command']
else:
logger.error("Old method used for returning gameplay infos")
launch_arguments = gameplay_info
resolution = self.game_config.get_system('resolution')
if resolution:
desktop_control.change_resolution(resolution)
if self.game_config.get_system('reset_pulse'):
desktop_control.reset_pulse()
if self.game_config.get_system('hide_panels'):
self.desktop.hide_panels()
oss_wrapper = self.game_config.get_system("oss_wrapper")
if oss_wrapper:
launch_arguments.insert(0, audio.get_oss_wrapper(oss_wrapper))
ld_preload = gameplay_info.get('ld_preload')
if ld_preload:
launch_arguments.insert(0, 'LD_PRELOAD="{}"'.format(ld_preload))
ld_library_path = gameplay_info.get('ld_library_path')
if ld_library_path:
launch_arguments.insert(
0, 'LD_LIBRARY_PATH="{}"'.format(ld_library_path)
)
killswitch = self.game_config.get_system('killswitch')
self.heartbeat = GLib.timeout_add(5000, self.poke_process)
self.game_thread = LutrisThread(" ".join(launch_arguments),
path=self.runner.get_game_path(),
killswitch=killswitch)
if hasattr(self.runner, 'stop'):
self.game_thread.set_stop_command(self.runner.stop)
self.game_thread.start()
if 'joy2key' in gameplay_info:
self.joy2key(gameplay_info['joy2key'])
xboxdrv_config = self.game_config.get_system('xboxdrv')
if xboxdrv_config:
self.xboxdrv(xboxdrv_config)
def joy2key(self, config):
""" Run a joy2key thread. """
win = "grep %s" % config['window']
if 'notwindow' in config:
win = win + ' | grep -v %s' % config['notwindow']
wid = "xwininfo -root -tree | %s | awk '{print $1}'" % win
buttons = config['buttons']
axis = "Left Right Up Down"
rcfile = "~/.joy2keyrc"
command = "sleep 5 "
command += "&& joy2key $(%s) -X -rcfile %s -buttons %s -axis %s" % (
wid, rcfile, buttons, axis
)
joy2key_thread = LutrisThread(command)
self.game_thread.attach_thread(joy2key_thread)
joy2key_thread.start()
def xboxdrv(self, config):
command = ("pkexec xboxdrv --daemon --detach-kernel-driver "
"--dbus session --silent %s"
% config)
logger.debug("xboxdrv command: %s", command)
thread = LutrisThread(command)
thread.start()
def poke_process(self):
""" Watch game's process. """
if not self.game_thread.pid:
self.quit_game()
return False
return True
def quit_game(self):
""" Quit the game and cleanup. """
self.heartbeat = None
quit_time = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())
logger.debug("game has quit at %s" % quit_time)
if self.game_config.get_system('resolution'):
desktop_control.reset_desktop()
if self.game_config.get_system('xboxdrv'):
logger.debug("Shutting down xboxdrv")
os.system("pkexec xboxdrvctl --shutdown")
if self.game_thread:
self.game_thread.stop()
示例2: Game
# 需要导入模块: from lutris.thread import LutrisThread [as 别名]
# 或者: from lutris.thread.LutrisThread import stop [as 别名]
class Game(object):
"""This class takes cares about loading the configuration for a game
and running it.
"""
STATE_IDLE = 'idle'
STATE_STOPPED = 'stopped'
STATE_RUNNING = 'running'
def __init__(self, slug):
self.slug = slug
self.runner = None
self.game_thread = None
self.heartbeat = None
self.config = None
self.killswitch = None
self.state = self.STATE_IDLE
self.game_log = ''
game_data = pga.get_game_by_slug(slug)
self.runner_name = game_data.get('runner') or ''
self.directory = game_data.get('directory') or ''
self.name = game_data.get('name') or ''
self.is_installed = bool(game_data.get('installed')) or False
self.year = game_data.get('year') or ''
self.load_config()
self.resolution_changed = False
self.original_outputs = None
def __repr__(self):
return self.__unicode__()
def __unicode__(self):
value = self.name
if self.runner_name:
value += " (%s)" % self.runner_name
return value
def get_browse_dir(self):
"""Return the path to open with the Browse Files action."""
return self.runner.browse_dir
def load_config(self):
"""Load the game's configuration."""
self.config = LutrisConfig(runner_slug=self.runner_name,
game_slug=self.slug)
if not self.is_installed:
return
if not self.runner_name:
logger.error('Incomplete data for %s', self.slug)
return
try:
runner_class = import_runner(self.runner_name)
except InvalidRunner:
logger.error("Unable to import runner %s for %s",
self.runner_name, self.slug)
self.runner = runner_class(self.config)
def remove(self, from_library=False, from_disk=False):
if from_disk:
self.runner.remove_game_data(game_path=self.directory)
if from_library:
pga.delete_game(self.slug)
self.config.remove()
else:
pga.set_uninstalled(self.slug)
def save(self):
self.config.save()
pga.add_or_update(
name=self.name,
runner=self.runner_name,
slug=self.slug,
directory=self.directory,
installed=self.is_installed
)
def prelaunch(self):
"""Verify that the current game can be launched."""
if not self.runner.is_installed():
installed = self.runner.install_dialog()
if not installed:
return False
if hasattr(self.runner, 'prelaunch'):
return self.runner.prelaunch()
return True
def use_runtime(self, system_config):
disable_runtime = system_config.get('disable_runtime')
env_runtime = os.getenv('LUTRIS_RUNTIME')
if env_runtime and env_runtime.lower() in ('0', 'off'):
disable_runtime = True
return not disable_runtime
def play(self):
"""Launch the game."""
if not self.runner:
dialogs.ErrorDialog("Invalid game configuration: Missing runner")
return False
#.........这里部分代码省略.........
示例3: Game
# 需要导入模块: from lutris.thread import LutrisThread [as 别名]
# 或者: from lutris.thread.LutrisThread import stop [as 别名]
#.........这里部分代码省略.........
prefix_command = system_config.get("prefix_command", '').strip()
if prefix_command and system.find_executable(prefix_command):
launch_arguments.insert(0, prefix_command)
ld_preload = gameplay_info.get('ld_preload')
if ld_preload:
launch_arguments.insert(0, 'LD_PRELOAD="{}"'.format(ld_preload))
ld_library_path = []
runtime64_path = os.path.join(settings.RUNTIME_DIR, "lib64")
if os.path.exists(runtime64_path):
ld_library_path.append(runtime64_path)
runtime32_path = os.path.join(settings.RUNTIME_DIR, "lib32")
if os.path.exists(runtime32_path):
ld_library_path.append(runtime32_path)
game_ld_libary_path = gameplay_info.get('ld_library_path')
if game_ld_libary_path:
ld_library_path.append(game_ld_libary_path)
if ld_library_path:
ld_full = ':'.join(ld_library_path)
ld_arg = 'LD_LIBRARY_PATH="{}:$LD_LIBRARY_PATH"'.format(ld_full)
launch_arguments.insert(0, ld_arg)
env = gameplay_info.get('env') or []
for var in env:
launch_arguments.insert(0, var)
killswitch = system_config.get('killswitch')
self.game_thread = LutrisThread(" ".join(launch_arguments),
path=self.runner.working_dir,
killswitch=killswitch)
if hasattr(self.runner, 'stop'):
self.game_thread.set_stop_command(self.runner.stop)
self.game_thread.start()
if 'joy2key' in gameplay_info:
self.joy2key(gameplay_info['joy2key'])
xboxdrv_config = system_config.get('xboxdrv')
if xboxdrv_config:
self.xboxdrv_start(xboxdrv_config)
if self.runner.is_watchable:
# Create heartbeat every
self.heartbeat = GLib.timeout_add(5000, self.poke_process)
def joy2key(self, config):
"""Run a joy2key thread."""
if not system.find_executable('joy2key'):
logger.error("joy2key is not installed")
return
win = "grep %s" % config['window']
if 'notwindow' in config:
win += ' | grep -v %s' % config['notwindow']
wid = "xwininfo -root -tree | %s | awk '{print $1}'" % win
buttons = config['buttons']
axis = "Left Right Up Down"
rcfile = os.path.expanduser("~/.joy2keyrc")
rc_option = '-rcfile %s' % rcfile if os.path.exists(rcfile) else ''
command = "sleep 5 "
command += "&& joy2key $(%s) -X %s -buttons %s -axis %s" % (
wid, rc_option, buttons, axis
)
joy2key_thread = LutrisThread(command)
self.game_thread.attach_thread(joy2key_thread)
joy2key_thread.start()
示例4: Game
# 需要导入模块: from lutris.thread import LutrisThread [as 别名]
# 或者: from lutris.thread.LutrisThread import stop [as 别名]
class Game(object):
"""This class takes cares of loading the configuration for a game
and running it.
"""
STATE_IDLE = 'idle'
STATE_STOPPED = 'stopped'
STATE_RUNNING = 'running'
def __init__(self, id=None):
self.id = id
self.runner = None
self.game_thread = None
self.heartbeat = None
self.config = None
self.killswitch = None
self.state = self.STATE_IDLE
self.game_log = ''
self.exit_main_loop = False
game_data = pga.get_game_by_field(id, 'id')
self.slug = game_data.get('slug') or ''
self.runner_name = game_data.get('runner') or ''
self.directory = game_data.get('directory') or ''
self.name = game_data.get('name') or ''
self.is_installed = bool(game_data.get('installed')) or False
self.year = game_data.get('year') or ''
self.game_config_id = game_data.get('configpath') or ''
self.steamid = game_data.get('steamid') or ''
self.has_custom_banner = bool(game_data.get('has_custom_banner')) or False
self.has_custom_icon = bool(game_data.get('has_custom_icon')) or False
self.load_config()
self.resolution_changed = False
self.original_outputs = None
def __repr__(self):
return self.__unicode__()
def __unicode__(self):
value = self.name
if self.runner_name:
value += " (%s)" % self.runner_name
return value
def get_browse_dir(self):
"""Return the path to open with the Browse Files action."""
return self.runner.browse_dir
def load_config(self):
"""Load the game's configuration."""
self.config = LutrisConfig(runner_slug=self.runner_name,
game_config_id=self.game_config_id)
if not self.is_installed:
return
if not self.runner_name:
logger.error('Incomplete data for %s', self.slug)
return
try:
runner_class = import_runner(self.runner_name)
except InvalidRunner:
logger.error("Unable to import runner %s for %s",
self.runner_name, self.slug)
else:
self.runner = runner_class(self.config)
def remove(self, from_library=False, from_disk=False):
if from_disk and self.runner:
logger.debug("Removing game %s from disk" % self.id)
self.runner.remove_game_data(game_path=self.directory)
# Do not keep multiple copies of the same game
existing_games = pga.get_game_by_field(self.slug, 'slug', all=True)
if len(existing_games) > 1:
from_library = True
if from_library:
logger.debug("Removing game %s from library" % self.id)
pga.delete_game(self.id)
else:
pga.set_uninstalled(self.id)
self.config.remove()
shortcuts.remove_launcher(self.slug, self.id, desktop=True, menu=True)
return from_library
def save(self):
self.config.save()
self.id = pga.add_or_update(
name=self.name,
runner=self.runner_name,
slug=self.slug,
directory=self.directory,
installed=self.is_installed,
configpath=self.config.game_config_id,
steamid=self.steamid,
id=self.id
)
def prelaunch(self):
"""Verify that the current game can be launched."""
if not self.runner.is_installed():
#.........这里部分代码省略.........
示例5: Game
# 需要导入模块: from lutris.thread import LutrisThread [as 别名]
# 或者: from lutris.thread.LutrisThread import stop [as 别名]
class Game(object):
"""This class takes cares of loading the configuration for a game
and running it.
"""
STATE_IDLE = 'idle'
STATE_STOPPED = 'stopped'
STATE_RUNNING = 'running'
def __init__(self, id=None):
self.id = id
self.runner = None
self.game_thread = None
self.heartbeat = None
self.config = None
self.killswitch = None
self.state = self.STATE_IDLE
self.exit_main_loop = False
game_data = pga.get_game_by_field(id, 'id')
self.slug = game_data.get('slug') or ''
self.runner_name = game_data.get('runner') or ''
self.directory = game_data.get('directory') or ''
self.name = game_data.get('name') or ''
self.is_installed = bool(game_data.get('installed')) or False
self.platform = game_data.get('platform') or ''
self.year = game_data.get('year') or ''
self.lastplayed = game_data.get('lastplayed') or 0
self.game_config_id = game_data.get('configpath') or ''
self.steamid = game_data.get('steamid') or ''
self.has_custom_banner = bool(game_data.get('has_custom_banner')) or False
self.has_custom_icon = bool(game_data.get('has_custom_icon')) or False
self.load_config()
self.resolution_changed = False
self.original_outputs = None
self.log_buffer = Gtk.TextBuffer()
self.log_buffer.create_tag("warning", foreground="red")
def __repr__(self):
return self.__unicode__()
def __unicode__(self):
value = self.name
if self.runner_name:
value += " (%s)" % self.runner_name
return value
def show_error_message(self, message):
"""Display an error message based on the runner's output."""
if "CUSTOM" == message['error']:
message_text = message['text'].replace('&', '&')
dialogs.ErrorDialog(message_text)
elif "RUNNER_NOT_INSTALLED" == message['error']:
dialogs.ErrorDialog('Error the runner is not installed')
elif "NO_BIOS" == message['error']:
dialogs.ErrorDialog("A bios file is required to run this game")
elif "FILE_NOT_FOUND" == message['error']:
filename = message['file']
if filename:
message_text = "The file {} could not be found".format(
filename.replace('&', '&')
)
else:
message_text = "No file provided"
dialogs.ErrorDialog(message_text)
elif "NOT_EXECUTABLE" == message['error']:
message_text = message['file'].replace('&', '&')
dialogs.ErrorDialog("The file %s is not executable" % message_text)
def get_browse_dir(self):
"""Return the path to open with the Browse Files action."""
return self.runner.browse_dir
def load_config(self):
"""Load the game's configuration."""
self.config = LutrisConfig(runner_slug=self.runner_name,
game_config_id=self.game_config_id)
if not self.is_installed:
return
if not self.runner_name:
logger.error('Incomplete data for %s', self.slug)
return
try:
runner_class = import_runner(self.runner_name)
except InvalidRunner:
logger.error("Unable to import runner %s for %s",
self.runner_name, self.slug)
else:
self.runner = runner_class(self.config)
def remove(self, from_library=False, from_disk=False):
if from_disk and self.runner:
logger.debug("Removing game %s from disk" % self.id)
self.runner.remove_game_data(game_path=self.directory)
# Do not keep multiple copies of the same game
existing_games = pga.get_games_where(slug=self.slug)
if len(existing_games) > 1:
#.........这里部分代码省略.........