Skip to content

Commit 0300a39

Browse files
add option to return a message to a client after processing one
1 parent 1fd6654 commit 0300a39

File tree

3 files changed

+23
-12
lines changed

3 files changed

+23
-12
lines changed

examples/example_servers.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def _process_message(self, obj):
2424
if obj != '':
2525
if obj['message'] == "new connection":
2626
logger.info("new connection.")
27+
return {'message': 'welcome to jsocket server'}
2728

2829
class MyFactoryThread(jsocket.ServerFactoryThread):
2930
""" This is an example factory thread, which the server factory will
@@ -37,25 +38,29 @@ def _process_message(self, obj):
3738
""" virtual method - Implementer must define protocol """
3839
if obj != '':
3940
if obj['message'] == "new connection":
40-
logger.info("new connection.")
41+
logger.info("new connection...")
42+
return {'message': 'welcome to jsocket server'}
4143
else:
4244
logger.info(obj)
4345

4446
if __name__ == "__main__":
4547
import time
4648
import jsocket
4749

48-
server = jsocket.ServerFactory(MyFactoryThread, address='127.0.0.1', port=5490)
50+
server = jsocket.ServerFactory(MyFactoryThread, address='127.0.0.1', port=5491)
4951
server.timeout = 2.0
5052
server.start()
5153

5254
time.sleep(1)
5355
cPids = []
5456
for i in range(10):
55-
client = jsocket.JsonClient(address='127.0.0.1', port=5490)
57+
client = jsocket.JsonClient(address='127.0.0.1', port=5491)
5658
cPids.append(client)
5759
client.connect()
5860
client.send_obj({"message": "new connection", "test": i})
61+
logger.info(client.read_obj())
62+
63+
5964
client.send_obj({"message": i, "key": 1 })
6065

6166
time.sleep(2)

jsocket/tserver.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
GNU General Public License for more details.
2121
2222
You should have received a copy of the GNU General Public License
23-
along with tserver module. If not, see <http://www.gnu.org/licenses/>."""
23+
along with tserver module. If not, see <http://www.gnu.org/licenses/>."""
2424
__version__ = "1.0.2"
2525

2626
import jsocket.jsocket_base as jsocket_base
@@ -42,8 +42,8 @@ def _process_message(self, obj):
4242
4343
This method is called every time a JSON object is received from a client
4444
45-
@param obj JSON "key: value" object received from client
46-
@retval None
45+
@param obj JSON "key: value" object received from client
46+
@retval None or a response object
4747
"""
4848
pass
4949

@@ -61,7 +61,10 @@ def run(self):
6161
while self._isAlive:
6262
try:
6363
obj = self.read_obj()
64-
self._process_message(obj)
64+
resp_obj = self._process_message(obj)
65+
if resp_obj is not None:
66+
logger.debug("message has a response")
67+
self.send_obj(resp_obj)
6568
except socket.timeout as e:
6669
logger.debug("socket.timeout: %s" % e)
6770
continue
@@ -100,20 +103,23 @@ def swap_socket(self, new_sock):
100103
""" Swaps the existing socket with a new one. Useful for setting socket after a new connection.
101104
102105
@param new_sock socket to replace the existing default jsocket.JsonSocket object
103-
@retval None
106+
@retval None
104107
"""
105108
del self.socket
106109
self.socket = new_sock
107110
self.conn = self.socket
108111

109112
def run(self):
110113
""" Should exit when client closes socket conn.
111-
Can force an exit with force_stop.
114+
Can force an exit with force_stop.
112115
"""
113116
while self._isAlive:
114117
try:
115118
obj = self.read_obj()
116-
self._process_message(obj)
119+
resp_obj = self._process_message(obj)
120+
if resp_obj is not None:
121+
logger.debug("message has a response")
122+
self.send_obj(resp_obj)
117123
except socket.timeout as e:
118124
logger.debug("socket.timeout: %s" % e)
119125
continue
@@ -136,7 +142,7 @@ def start(self):
136142

137143
def force_stop(self):
138144
""" Force stops the factory thread.
139-
Should exit when client socket is closed under normal conditions.
145+
Should exit when client socket is closed under normal conditions.
140146
The life of the dead is in the memory of the living.
141147
142148
@retval None

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from setuptools import setup, Extension
44

55
setup(name='jsocket',
6-
version='1.9.0',
6+
version='1.9.1',
77
description='Python JSON Server & Client',
88
author='Christopher Piekarski',
99
author_email='[email protected]',

0 commit comments

Comments
 (0)