コード例 #1
0
ファイル: chats_service.py プロジェクト: dstuebe/coi-services
class ChatServerService(BaseChatsService):
    def on_init(self):
        print "INIT CHAT SERVER"
        self.clients = DotDict()

    def register(self, user_name='', proc_id=''):
        print "Registering user %s, client %s" % (user_name, proc_id)
        client = ProcessRPCClient(node=self.container.node, name=proc_id, iface=IChatcService, process=self)
        self.clients[user_name] = DotDict(procid=proc_id, user_name=user_name, client=client)
        return "OK"

    def unregister(self, user_name=''):
        log.debug("Unregistering client %s" % proc_id)
        del self.clients[user_name]
        return "OK"

    def message(self, from_name='', to_name='', text=''):
        if to_name == "all":
            for cl in self.clients.values():
                cl['client'].message(from_name=from_name, text=text)
        else:
            client = self.clients.get(to_name, None)
            if client:
                client.client.message(from_name=from_name, text=text)
            else:
                return "USER NOT FOUND"
        return "OK"

    def list_users(self):
        return str(self.clients.keys())
コード例 #2
0
class ChatServerService(BaseChatsService):
    def on_init(self):
        print "INIT CHAT SERVER"
        self.clients = DotDict()

    def register(self, user_name='', proc_id=''):
        print "Registering user %s, client %s" % (user_name, proc_id)
        client = ProcessRPCClient(node=self.container.node,
                                  name=proc_id,
                                  iface=IChatcService,
                                  process=self)
        self.clients[user_name] = DotDict(procid=proc_id,
                                          user_name=user_name,
                                          client=client)
        return "OK"

    def unregister(self, user_name=''):
        log.debug("Unregistering client %s" % proc_id)
        del self.clients[user_name]
        return "OK"

    def message(self, from_name='', to_name='', text=''):
        if to_name == "all":
            for cl in self.clients.values():
                cl['client'].message(from_name=from_name, text=text)
        else:
            client = self.clients.get(to_name, None)
            if client:
                client.client.message(from_name=from_name, text=text)
            else:
                return "USER NOT FOUND"
        return "OK"

    def list_users(self):
        return str(self.clients.keys())
コード例 #3
0
    def request(self, query=None, id_only=True):
        if not query:
            raise BadRequest('No request query provided')

        if "QUERYEXP" in query and self.ds_discovery:
            # Support for datastore queries
            pass

        else:
            if not query.has_key('query'):
                raise BadRequest('Unsuported request. %s')

            #==============================
            # Check the form of the query
            #==============================
            #@todo: convert to IonObject
            if not (query.has_key('query')):
                raise BadRequest('Improper query request: %s' % query)

        # Inject RR query execution e.g. for postgres
        if self.ds_discovery:
            res = self.ds_discovery.execute_query(query, id_only=id_only)
            return res

        # ---------------------------
        # Number of results to return
        # ---------------------------
        limit = int(query.get('limit',self.MAX_SEARCH_RESULTS))

        query_queue = list()

        query = DotDict(query)
       
        # -- former tier-1 (no and/or) search, returns an elasticsearch object
        if (len(query.get('and',[])) + len(query.get('or',[])) == 0 ):
            return self.query_request(query.query,limit=self.SEARCH_BUFFER_SIZE)[:limit]
 
        query_queue.append(self.query_request(query.query,limit=self.SEARCH_BUFFER_SIZE, id_only=True))
        
        #==================
        # Intersection
        #==================
        for q in query.get('and',[]):
            query_queue.append(self.query_request(q, limit=self.SEARCH_BUFFER_SIZE, id_only=True))
        while len(query_queue) > 1:
            tmp = self.intersect(query_queue.pop(), query_queue.pop())
            query_queue.append(tmp)
        
        #==================
        # Union
        #==================
        for q in query.get('or',[]):
            query_queue.append(self.query_request(q, limit=self.SEARCH_BUFFER_SIZE, id_only=True))
        while len(query_queue) > 1:
            tmp = self.union(query_queue.pop(), query_queue.pop())
            query_queue.append(tmp)
        
        if id_only:
            return query_queue[0][:limit]

        objects = self.clients.resource_registry.read_mult(query_queue[0][:limit])
        return objects