コード例 #1
0
####################################
## Readable code versus less code ##
####################################

from web_server.general_api import general_api as api
from web_server.web_api import web_server_api as server_api

import threading
import callme

logger = api.__get_logger('web_core.run')

class MasterServer(threading.Thread):
    def __init__(self, sid):
        self.sid = sid
        super(MasterServer, self).__init__()
        
    def run(self):

        ## start inspection on inactive clients
        server_api._inspect_inactive_children(self.sid)

        ## checking for timeout and refreshing common key
        threading.Timer(api.COMMON_KEY_TIMEOUT, 
            server_api._refresh_common_key, 
            [self.sid]).start()

        ## call for cleaning failed nodes
        threading.Timer(api.CLEAN_GARBAGE_NODES, 
        server_api._clean_failed_garbages, [self.sid]).start()  
コード例 #2
0
import json
import callme
import pika
import pickle
import dill
sys.path.append(r'C:\Users\haejong\Documents\distributed_system_2016\Chatchat')  
        
from web_server.general_api import general_api as api
from web_server.general_api.connection_timeout import ConnTimeout
#from web_server.general_api.redis_queue import Queue    
from client_model import AppModel, NodeModel, CommentReplicaModel
from shared_res_model import CommentModel#CommentListModel

#q = Queue(db=api.REDIS_ID_NODE)

logger = api.__get_logger('app_client.api.run')
    
## RTC call
def add_comments(**data):   ## [{"by":"nid", "comment":"comment"}, ...]
    if not isinstance(data['content'], list):
        data['content'] = [data['content']]

    if data['permission']:

        for ele in data['content']:
            # TODO: compare also 'by' to make sure or set primary key for 'created_at'
            if not CommentModel.objects(timestamp=ele['created_at']):
                CommentModel(
                    by=ele['by'], 
                    timestamp=ele['created_at'], 
                    comment=ele['comment'],
コード例 #3
0
####################################
## Readable code versus less code ##
####################################

import pika
import threading
import json

import web_server_api as server_api

from web_server.general_api import general_api as api

logger = api.__get_logger("new_clinet_listener.run")

## define exchange name for broadcasting message
## define handshake queue for handshaking with the new node


## listen to new nodes
class NewNodeListener(threading.Thread):
    def __init__(self, sid):
        self.sid = sid
        super(NewNodeListener, self).__init__()

    def run(self):
        connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost", port=5672))
        channel = connection.channel()
        channel.exchange_declare(exchange=api.TOPIC_NEW_NODE, type="topic")
        result = channel.queue_declare(exclusive=True)
        queue_name = result.method.queue
コード例 #4
0
class Sessions(Document):
    created_at = DateTimeField(
        default=api._get_current_time(), 
        required=True)
    by = StringField(max_length=128)
    ssid = StringField(
        required=True,
        max_length=128, 
        default=api._generate_session_id())
    user_data = StringField(max_length=500, required=True)
    expiration = DateTimeField(required=True)
    modified = DateTimeField(required=True,
        default=api._get_current_time())


logger = api.__get_logger('MongoSession')

##  users' session manager
class MongoSession(CallbackDict, SessionMixin):

    def __init__(self, 
        initial=None, 
        ssid=None, 
        modified=None):

        CallbackDict.__init__(self, initial)
        self.ssid = ssid
        self.modified = modified


class MongoSessionInterface(SessionInterface):
コード例 #5
0
####################################
## Readable code versus less code ##
####################################

import threading
from web_server.general_api import general_api as api

logger = api.__get_logger('ConnTimeout.run')


class ConnTimeout(object):
    def __init__(self, timeout, function, servers=5, args=[], kwargs=[]):
        self.timeout = timeout
        self.timer = None   #threading.Timer(timeout, pickle.loads(function), args)
        self.count = 0
        self.f = function
        self.servers = servers
        self.args = args
        self.kwargs = kwargs
        super(ConnTimeout, self).__init__()


    #def __reduce__(self):
    #    return (self.__class__, (self.name, self.address))


    def start(self):
        return self._start()


    def _start(self):
コード例 #6
0
####################################
## Readable code versus less code ##
####################################

import pika
import threading
import json
import app_client_api as app_api
import callme

from web_server.general_api import general_api as api
from web_server.general_api.general_api import _ACTION_KEYS
from client_model import AppModel, CommentReplicaModel


logger = api.__get_logger('app_listener.run')


class BroadcastListener(threading.Thread):
    def __init__(self, nid):
        self.nid = nid
        super(BroadcastListener, self).__init__()
        

    def run(self):
        connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))
        channel = connection.channel()
        channel.exchange_declare(exchange=api.EXCHANGE_FOR_ALL,
            type='fanout')
        result = channel.queue_declare(exclusive=True)
        queue_name = result.method.queue
コード例 #7
0
import callme
import threading
import pika
import json
import redis
import bson

#from itsdangerous import Signer
from web_server.general_api import general_api as api
from web_server.general_api.redis_queue import Queue

from server_model import WebServerModel, ChildrenModel, ServerLogModel, Sessions
from shared_res_model import CommentModel, UserSessions
from mongoengine import *

logger = api.__get_logger('web_server_api.run')

## for queueing turns for node to get the access to shared resource
q = Queue(db=api.REDIS_ID)

q.flush()


def _add_children(client, sid):
	s_obj = WebServerModel.objects(sid=sid)
	children = ChildrenModel(
		nid=client['nid'], 
    	created_at=client['created_at'], 
    	public_key=client['public_key'],
    	last_access=client['created_at'])
    	#last_work=api._get_current_time())