forked from mtearle/npyscreenreactor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
EXAMPLE-npyscreenreactor-server.py
executable file
·120 lines (73 loc) · 2.59 KB
/
EXAMPLE-npyscreenreactor-server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python
# EXAMPLE-npyscreenreactor-server.py
# Copyright (c) 2015 Mark Tearle <mark@tearle.com>
# See LICENSE for details.
# This example binds to localhost and listens on port 5000
#
# Any text received is responded with an "OK .. " followed by the text
#
import npyscreen
import curses
# Twisted
from twisted.internet import protocol
import npyscreenreactor
class MyTestApp(npyscreen.StandardApp):
def updateFields(self, received="", sent=""):
self.sent = sent
self.received = received
def onStart(self):
self.keypress_timeout_default = 1
self.addForm("MAIN", MainForm, name="EXAMPLE-npyscreenreactor", color="IMPORTANT", )
self.sent = ""
self.currentform = None
def while_waiting(self):
pass
def onCleanExit(self):
npyscreen.notify_wait("Goodbye!")
def change_form(self, name):
self.switchForm(name)
self.resetHistory()
class MainForm(npyscreen.ActionForm):
def create(self):
self.keypress_timeout_default = 1
self.sentfield = self.add(npyscreen.TitleText, name="Sent:", value="", editable=False)
self.receivedfield = self.add(npyscreen.TitleText, name="Received:", value="", editable=False)
def while_waiting(self):
self.sentfield.value = self.parentApp.sent
self.receivedfield.value = self.parentApp.received
self.sentfield.display()
self.receivedfield.display()
def on_ok(self):
# Exit the application if the OK button is pressed.
self.parentApp.switchForm(None)
class Echo(protocol.Protocol):
"""This is just about the simplest possible protocol"""
def dataReceived(self, data):
"As soon as any data is received, write it back."
response = 'OK ... ' + data
self.transport.write(response)
# update fields
self.factory.app.updateFields(data, response)
def connectionMade(self):
response = "OK ... Hello there ...\n"
data = "Connection from " + str(self.transport.getPeer())
self.transport.write(response)
self.factory.app.updateFields(data, response)
class EchoFactory(protocol.Factory):
"factory for echo"
# default protocol
protocol = Echo
def __init__(self, app):
self.app = app
def main():
testApp = MyTestApp()
factory = EchoFactory(testApp)
factory.protocol = Echo
reactor = npyscreenreactor.install()
PORT = 5000
reactor.listenTCP(PORT, factory)
testApp.updateFields(received="Chat server started on port " + str(PORT))
reactor.registerNpyscreenApp(testApp)
reactor.run()
if __name__ == '__main__':
main()