{
"info": {
"author": "Fernando Fl\u00f3rez",
"author_email": "fernando@funciton.com",
"bugtrack_url": null,
"classifiers": [],
"description": "Freeswitch EventSocket\n======================\n\nThis is a work in progress abstraction class to handle freeswitch's\neventsocket command lines.\n\nCurrently only inbound server is implemented.\n\n\nImplementation under Tornado's IOLoop\n-------------------------------------\n\nHere is a simple server implementation under `Tornado\n`_::\n\n import eventsocket\n\n from tornado.tcpserver import TCPServer\n import tornado.ioloop\n from tornado.gen import coroutine, Return\n\n\n class TestServer(eventsocket.BaseEventSocket, TCPServer):\n\n @coroutine\n def handle_stream(self, stream, address):\n self.stream = stream\n self.on_connect()\n\n @coroutine\n def send_and_receive(self, chunk):\n yield self.stream.write(chunk)\n _ = yield self.stream.read_until_regex(b'\\n\\n')\n raise Return(self._parse_event(_))\n\n @coroutine\n def on_connect(self):\n print 'connected!'\n data = yield self.connect()\n print data\n yield self.my_events()\n yield self.answer()\n yield self.playback(\n '{loops=10}tone_stream://path=${base_dir}/conf/tetris.ttml',\n lock=True\n )\n\n\n if __name__ == '__main__':\n server = TestServer()\n server.listen(8888, '0.0.0.0')\n tornado.ioloop.IOLoop.instance().start()\n\n\n\nImplementation under Twisted's Reactor\n--------------------------------------\n\nHere is a simple server implementation under `Twisted\n`_::\n\n import eventsocket\n\n from twisted.internet import defer, protocol\n from twisted.protocols import basic\n\n from cStringIO import StringIO\n\n\n class TestServer(eventsocket.BaseEventSocket, basic.LineReceiver):\n\n delimiter = '\\n'\n\n def __init__(self, *args, **kwargs):\n self.stream = None\n self._io = StringIO()\n self._queue = []\n super(TestServer, self).__init__(*args, **kwargs)\n\n def lineReceived(self, line):\n if len(line) > 0:\n self._io.write('%s\\n' % line)\n else:\n self.dispatch_event()\n\n def dispatch_event(self):\n try:\n deferred = self._queue.pop(0)\n except IndexError:\n pass\n else:\n self._io.reset()\n _ = self._parse_event(self._io.read())\n deferred.callback(_)\n self._io.reset()\n self._io.truncate()\n\n def send_and_receive(self, chunk):\n deferred = defer.Deferred()\n self._queue.append(deferred)\n self.transport.write(chunk)\n return deferred\n\n @defer.inlineCallbacks\n def connectionMade(self):\n print 'connected!'\n data = yield self.connect()\n print data\n yield self.my_events()\n yield self.answer()\n yield self.playback(\n '{loops=10}tone_stream://path=${base_dir}/conf/tetris.ttml',\n lock=True\n )\n\n\n class PubFactory(protocol.Factory):\n\n def buildProtocol(self, addr):\n return TestServer()\n\n\n if __name__ == '__main__':\n from twisted.internet import reactor\n\n reactor.listenTCP(8888, PubFactory())\n reactor.run()\n\n\nFreeswitch EventSocket is available under\nthe `Apache License, Version 2.0\n`_.",
"description_content_type": null,
"docs_url": null,
"download_url": null,
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/fernandoflorez/freeswitch-eventsocket",
"keywords": null,
"license": "http://www.apache.org/licenses/LICENSE-2.0",
"maintainer": null,
"maintainer_email": null,
"name": "freeswitch-eventsocket",
"package_url": "https://pypi.org/project/freeswitch-eventsocket/",
"platform": "UNKNOWN",
"project_url": "https://pypi.org/project/freeswitch-eventsocket/",
"project_urls": {
"Homepage": "https://github.com/fernandoflorez/freeswitch-eventsocket"
},
"release_url": "https://pypi.org/project/freeswitch-eventsocket/0.5.dev/",
"requires_dist": null,
"requires_python": null,
"summary": "This is a work in progress abstraction class to handle freeswitch's eventsocket command lines.",
"version": "0.5.dev"
},
"last_serial": 1501726,
"releases": {
"0.5.dev": [
{
"comment_text": "",
"digests": {
"md5": "841296c83f987cccc1895ae584713f5d",
"sha256": "4d7aeadbae5f7df20b2a3aafe51f1d33be45f48576c2a37531a8fdd167b522c2"
},
"downloads": -1,
"filename": "freeswitch_eventsocket-0.5.dev-py2-none-any.whl",
"has_sig": false,
"md5_digest": "841296c83f987cccc1895ae584713f5d",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 5463,
"upload_time": "2015-04-11T22:21:14",
"url": "https://files.pythonhosted.org/packages/24/04/d87b93c6aa43e4bf16ab56417342feba079c77dcb5c266ca56c6943ef090/freeswitch_eventsocket-0.5.dev-py2-none-any.whl"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "841296c83f987cccc1895ae584713f5d",
"sha256": "4d7aeadbae5f7df20b2a3aafe51f1d33be45f48576c2a37531a8fdd167b522c2"
},
"downloads": -1,
"filename": "freeswitch_eventsocket-0.5.dev-py2-none-any.whl",
"has_sig": false,
"md5_digest": "841296c83f987cccc1895ae584713f5d",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 5463,
"upload_time": "2015-04-11T22:21:14",
"url": "https://files.pythonhosted.org/packages/24/04/d87b93c6aa43e4bf16ab56417342feba079c77dcb5c266ca56c6943ef090/freeswitch_eventsocket-0.5.dev-py2-none-any.whl"
}
]
}