Skip to content

Instantly share code, notes, and snippets.

@aurynn
Created April 9, 2014 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aurynn/10308389 to your computer and use it in GitHub Desktop.
Save aurynn/10308389 to your computer and use it in GitHub Desktop.
# Shamelessly stolen from the Twisted site
from twisted.internet import protocol, reactor, defer
from twisted.protocols.basic import LineReceiver
from twisted.internet.endpoints import TCP4ServerEndpoint
import json
class JsonEchoServer(LineReceiver):
"""
Implements the server-side mechanisms
"""
def __init__(self, *args):
# LineReceiver.__init__(self, *args)
self.acks = {}
self.msgid = 0
def connectionMade(self):
print "Connected!"
msg = {"from": "server",
"message": "connected",
"id": self.msgid}
self.sendLine(json.dumps(msg))
self.acks[self.msgid] = msg
self.msgid += 1
def lineReceived(self, line):
"""Receives a line from our remote"""
print "Line!"
m = None
try:
m = json.loads(line)
except json.JSONDecodeError as e:
self.sendLine(json.dumps(
{
"from": "server",
"message": "json parse error {error}".format(e)}
))
print "received non-json-decodable string"
return
self.sendLine(json.dumps({"acknowledge": m["id"]}))
self.sendLine(json.dumps(
{ "from": "EchoServer", "message": "%s said '%s'" % ( m["from"], m["message"] ) }
)
)
# if "message" in m:
# self.sendLine(json.dumps(
# { "from": "EchoServer", "message": "%s said '%s'" % ( m["from"], m["message"] ) }
# ))
# elif "acknowledge" in m:
# if m["acknowledge"] not in self.acks:
# self.sendLine(
# json.dumps({"from": "EchoServer", "message": "invalid ID to ack" }))
# del self.acks[m["acknowledge"]]
# print "{id} acknowledged".format(id=m["acknowledge"])
class EchoFactory(protocol.Factory):
def buildProtocol
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment