50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# vi:si:et:sw=4:sts=4:ts=4
|
||
|
|
||
|
from __future__ import division
|
||
|
|
||
|
from Queue import Queue
|
||
|
from threading import Thread
|
||
|
|
||
|
from websocket import trigger_event
|
||
|
import state
|
||
|
import link
|
||
|
|
||
|
import logging
|
||
|
logger = logging.getLogger('websocket')
|
||
|
|
||
|
class Tasks(Thread):
|
||
|
|
||
|
_active = True
|
||
|
|
||
|
def __init__(self):
|
||
|
self.q = Queue()
|
||
|
Thread.__init__(self)
|
||
|
self.daemon = True
|
||
|
self.start()
|
||
|
|
||
|
def run(self):
|
||
|
while self._active:
|
||
|
m = self.q.get()
|
||
|
if m:
|
||
|
action, data = m
|
||
|
logger.debug('process task: %s data: %s', action, data)
|
||
|
if action == 'sendMessage':
|
||
|
for peer in state.info.get('nodes', []):
|
||
|
link.remote(peer, 'message', data)
|
||
|
elif action == 'nick':
|
||
|
state.info['nick'] = data
|
||
|
for peer in state.info.get('nodes', []):
|
||
|
link.remote(peer, 'nick', data)
|
||
|
self.q.task_done()
|
||
|
|
||
|
def join(self):
|
||
|
self._active = False
|
||
|
self.q.put(None)
|
||
|
self.q.join()
|
||
|
return Thread.join(self)
|
||
|
|
||
|
def queue(self, action, data=None):
|
||
|
self.q.put((action, data))
|
||
|
|