67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
from kivy.support import install_twisted_reactor
|
|
install_twisted_reactor()
|
|
|
|
import os
|
|
import sys
|
|
|
|
from kivy.app import App
|
|
from kivy.uix.gridlayout import GridLayout
|
|
from kivy.properties import BooleanProperty
|
|
from kivy.lang import Builder
|
|
|
|
from twisted.scripts._twistd_unix import UnixApplicationRunner, ServerOptions
|
|
from twisted.application.service import IServiceCollection
|
|
|
|
TWISTD = 'twistd web --listen=tcp:8087'
|
|
|
|
|
|
class AndroidApplicationRunner(UnixApplicationRunner):
|
|
|
|
def run(self):
|
|
|
|
self.preApplication()
|
|
self.application = self.createOrGetApplication()
|
|
self.logger.start(self.application)
|
|
sc = IServiceCollection(self.application)
|
|
|
|
# reactor is already running, so we just start the service collection
|
|
sc.startService()
|
|
return self.application
|
|
|
|
|
|
Builder.load_string('''
|
|
<TwistedTwistd>:
|
|
cols: 1
|
|
Button:
|
|
text: root.running and 'STOP' or 'START'
|
|
on_release: root.cb_twistd()
|
|
''')
|
|
|
|
|
|
class TwistedTwistd(GridLayout):
|
|
|
|
running = BooleanProperty(False)
|
|
|
|
def cb_twistd(self, *la):
|
|
|
|
if self.running:
|
|
IServiceCollection(self.app).stopService()
|
|
self.running = False
|
|
else:
|
|
sys.path.insert(0, os.path.abspath(os.getcwd()))
|
|
sys.argv = TWISTD.split(' ')
|
|
config = ServerOptions()
|
|
config.parseOptions()
|
|
self.app = AndroidApplicationRunner(config).run()
|
|
self.running = True
|
|
|
|
|
|
class TwistedTwistdApp(App):
|
|
|
|
def build(self):
|
|
return TwistedTwistd()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
TwistedTwistdApp().run()
|