{ "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" } ] }