first commit
This commit is contained in:
commit
417e54da96
5696 changed files with 900003 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,82 @@
|
|||
# install_twisted_rector must be called before importing the reactor
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from kivy.support import install_twisted_reactor
|
||||
|
||||
install_twisted_reactor()
|
||||
|
||||
# A Simple Client that send messages to the Echo Server
|
||||
from twisted.internet import reactor, protocol
|
||||
|
||||
|
||||
class EchoClient(protocol.Protocol):
|
||||
def connectionMade(self):
|
||||
self.factory.app.on_connection(self.transport)
|
||||
|
||||
def dataReceived(self, data):
|
||||
self.factory.app.print_message(data.decode('utf-8'))
|
||||
|
||||
|
||||
class EchoClientFactory(protocol.ClientFactory):
|
||||
protocol = EchoClient
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
def startedConnecting(self, connector):
|
||||
self.app.print_message('Started to connect.')
|
||||
|
||||
def clientConnectionLost(self, connector, reason):
|
||||
self.app.print_message('Lost connection.')
|
||||
|
||||
def clientConnectionFailed(self, connector, reason):
|
||||
self.app.print_message('Connection failed.')
|
||||
|
||||
|
||||
from kivy.app import App
|
||||
from kivy.uix.label import Label
|
||||
from kivy.uix.textinput import TextInput
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
|
||||
|
||||
# A simple kivy App, with a textbox to enter messages, and
|
||||
# a large label to display all the messages received from
|
||||
# the server
|
||||
class TwistedClientApp(App):
|
||||
connection = None
|
||||
textbox = None
|
||||
label = None
|
||||
|
||||
def build(self):
|
||||
root = self.setup_gui()
|
||||
self.connect_to_server()
|
||||
return root
|
||||
|
||||
def setup_gui(self):
|
||||
self.textbox = TextInput(size_hint_y=.1, multiline=False)
|
||||
self.textbox.bind(on_text_validate=self.send_message)
|
||||
self.label = Label(text='connecting...\n')
|
||||
layout = BoxLayout(orientation='vertical')
|
||||
layout.add_widget(self.label)
|
||||
layout.add_widget(self.textbox)
|
||||
return layout
|
||||
|
||||
def connect_to_server(self):
|
||||
reactor.connectTCP('localhost', 8000, EchoClientFactory(self))
|
||||
|
||||
def on_connection(self, connection):
|
||||
self.print_message("Connected successfully!")
|
||||
self.connection = connection
|
||||
|
||||
def send_message(self, *args):
|
||||
msg = self.textbox.text
|
||||
if msg and self.connection:
|
||||
self.connection.write(msg.encode('utf-8'))
|
||||
self.textbox.text = ""
|
||||
|
||||
def print_message(self, msg):
|
||||
self.label.text += "{}\n".format(msg)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
TwistedClientApp().run()
|
|
@ -0,0 +1,49 @@
|
|||
# install_twisted_rector must be called before importing and using the reactor
|
||||
from kivy.support import install_twisted_reactor
|
||||
|
||||
install_twisted_reactor()
|
||||
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet import protocol
|
||||
|
||||
|
||||
class EchoServer(protocol.Protocol):
|
||||
def dataReceived(self, data):
|
||||
response = self.factory.app.handle_message(data)
|
||||
if response:
|
||||
self.transport.write(response)
|
||||
|
||||
|
||||
class EchoServerFactory(protocol.Factory):
|
||||
protocol = EchoServer
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
|
||||
from kivy.app import App
|
||||
from kivy.uix.label import Label
|
||||
|
||||
|
||||
class TwistedServerApp(App):
|
||||
label = None
|
||||
|
||||
def build(self):
|
||||
self.label = Label(text="server started\n")
|
||||
reactor.listenTCP(8000, EchoServerFactory(self))
|
||||
return self.label
|
||||
|
||||
def handle_message(self, msg):
|
||||
msg = msg.decode('utf-8')
|
||||
self.label.text = "received: {}\n".format(msg)
|
||||
|
||||
if msg == "ping":
|
||||
msg = "Pong"
|
||||
if msg == "plop":
|
||||
msg = "Kivy Rocks!!!"
|
||||
self.label.text += "responded: {}\n".format(msg)
|
||||
return msg.encode('utf-8')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
TwistedServerApp().run()
|
|
@ -0,0 +1,66 @@
|
|||
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()
|
Loading…
Add table
Add a link
Reference in a new issue