annot-server/annotserver.py
author rougeronj
Thu, 22 Jan 2015 09:26:43 +0100
changeset 111 a7b72620d227
parent 43 e27c3c1c57f1
permissions -rw-r--r--
Add variable "wait". When this variable set, the annotsroll wait ignore some annotations, and wait before printing an otherone so there is no superposition. Can be passed as an options
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from autobahn.twisted.resource import WebSocketResource, \
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
                                      WSGIRootResource, \
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
                                      HTTPChannelHixie76Aware
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from twisted.application import service, internet, strports
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from twisted.internet import reactor
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from twisted.python.threadpool import ThreadPool
43
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    10
from twisted.web import server, resource
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
from twisted.web.wsgi import WSGIResource
2
fc1ab0074e29 export config in config file + add static file
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    12
from twisted.web.static import Data, File
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    14
import config
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
from oscserver import OSCServerProtocol
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
from websockets import BroadcastServerFactory, AnotationServerFactory
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
from webapp import app
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
WEB_PORT = 8080
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
WS_PORT = 8090
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
OSC_PORT = 9090
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
43
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    24
class BaseRedirect(resource.Resource):
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    25
    isLeaf = True
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    26
    def render_GET(self, request):
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    27
        request.redirect(request.URLPath().child('p/'))
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    28
        return ""
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    29
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    30
def make_service(conn, debug=False):
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    s = service.MultiService()
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    # Create and start a thread pool,
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    wsgiThreadPool = ThreadPool()
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    wsgiThreadPool.start()
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    # ensuring that it will be stopped when the reactor shuts down
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    reactor.addSystemEventTrigger('after', 'shutdown', wsgiThreadPool.stop)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    41
    wsFactory = BroadcastServerFactory("ws://localhost:%d/broadcast" % getattr(config,'WS_PORT',WS_PORT),
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
                                       debug = debug,
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
                                       debugCodePaths = debug)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    wsFactory.setProtocolOptions(allowHixie76 = True)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    wsResource = WebSocketResource(wsFactory)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    48
    wsAnnotFactory = AnotationServerFactory("ws://localhost:%d/annot" % getattr(config,'WS_PORT',WS_PORT),
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
                                       debug = debug,
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
                                       debugCodePaths = debug,
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
                                       ws_factory = wsFactory,
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
                                       conn = conn)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    wsAnnotFactory.setProtocolOptions(allowHixie76 = True)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    wsAnnotResource = WebSocketResource(wsAnnotFactory)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    rootWs = Data("", "text/plain")
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    rootWs.putChild("broadcast", wsResource)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    rootWs.putChild("annot", wsAnnotResource)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
2
fc1ab0074e29 export config in config file + add static file
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    62
    webResource = resource.Resource()
43
e27c3c1c57f1 end of admin. change the index page and add a redirect to it on the landing page
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    63
    webResource.putChild("",BaseRedirect())
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    64
    webResource.putChild(getattr(config,'STATIC_URL').lstrip('/'), File(getattr(config,'STATIC_ROOT')))
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    # Create the WSGI resource
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    wsgiAppAsResource = WSGIResource(reactor, wsgiThreadPool, app)
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    67
    webResource.putChild('p', wsgiAppAsResource)
2
fc1ab0074e29 export config in config file + add static file
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    68
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    # Hooks for twistd
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    72
    webserver = strports.service('tcp:%d' % getattr(config,'WEB_PORT',WEB_PORT), server.Site(webResource))
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    webserver.setServiceParent(s)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    75
    wsserver = strports.service('tcp:%d' % getattr(config,'WS_PORT',WS_PORT), server.Site(rootWs))
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    wsserver.setServiceParent(s)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
13
435d5c15275a clean client npm and gulp config, change flask root url, reference static url in template, change config management to follow flask convention
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    78
    oscservice = internet.UDPServer(getattr(config,'OSC_PORT',OSC_PORT), OSCServerProtocol(wsFactory, conn))
0
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    oscservice.setServiceParent(s)
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
e1d4d7a8255a First shareable version
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    return s