예제 #1
0
파일: server.py 프로젝트: brfrs/Murmur
    def __init__(self, port, ip, client_process):
        self.channel_port = port
        self.ip = ip

        self.registry = UserRegistry()

        self.client_process = client_process
        self.receiver = MessageReceiver(self.ip, self.channel_port)
        logger.info("Server initialized.")
예제 #2
0
파일: inbus.py 프로젝트: mlos/inbus
 def __init__(self, address=("127.0.0.1", 7222), buffer_size=65536):
     sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     registry = Registry()
     self._message_receiver = MessageReceiver(
         IncomingMessageTranslator(
             [registry,
              Broadcaster(registry,
                          MessageSender(OutgoingMessageTranslator(), sock))
              ]), address, buffer_size)
예제 #3
0
파일: inbus.py 프로젝트: mlos/inbus
class Inbus(object):

    def __init__(self, address=("127.0.0.1", 7222), buffer_size=65536):
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        registry = Registry()
        self._message_receiver = MessageReceiver(
            IncomingMessageTranslator(
                [registry,
                 Broadcaster(registry,
                             MessageSender(OutgoingMessageTranslator(), sock))
                 ]), address, buffer_size)

    def run(self):
        while True:
            try:
                self._message_receiver.wait_and_process_message()
            except:
                # TODO: logging
                pass
예제 #4
0
	def __init__(self, client_ip: str, server_ip: str, process, port=None):
		"""
		Initializes the client.

		server_ip - the server's ip address.
		port - the reception port of the server and the clients on the channel.
		process - properly received messages are passed to this function.
		"""
		logger.info("Client initialized.")
		self.process = process
		self.receiver = MessageReceiver(client_ip, port)

		self.server_ip = server_ip
		self.channel_port = port
		Thread(name="Client Listening Thread", 
			target=self.__process_messages, daemon=True).start()
예제 #5
0
파일: client.py 프로젝트: kapteinstein/ktn
    def run(self):
        # Initiate the connection to the server and receiver
        self.connection.connect((self.host, self.server_port))
        print("-------- : Connected to host: {}".format(self.host))
        MessageReceiver(self, self.connection)
        d = {}  # new dictonary for creating the payload

        while True:
            # get message from user
            message = input().split(' ', 1)
            d['request'] = message[0]
            try:
                d['content'] = message[1]
            except:
                # empty content
                d['content'] = ''

            payload = json.dumps(d)  # convert to json
            self.send_payload(payload)  # send payload

            if d['request'] == 'logout':
                return self.disconnect()
예제 #6
0
파일: server.py 프로젝트: brfrs/Murmur
class Server:
    """
	Murmur server.
	"""
    def __init__(self, port, ip, client_process):
        self.channel_port = port
        self.ip = ip

        self.registry = UserRegistry()

        self.client_process = client_process
        self.receiver = MessageReceiver(self.ip, self.channel_port)
        logger.info("Server initialized.")

    def start_processing(self):
        """
		Starts the server for actual processing.
		"""
        logger.info("Server processing started.")
        Thread(name='Server Processing Thread',
               target=self.__process_requests,
               daemon=True).start()

    def __process_requests(self):
        """
		Processes local and network messages. If it originates from a known
		client, it will try to parse the command or send it to everyone if it
		is not a command. If it originated from an unknown client it will try 
		to register them. 
		"""
        for received_message in self.receiver:
            if self.registry.ip_known(received_message.sender):
                logger.info("Message received from registered client.")
                if received_message.body.startswith(COMMAND_FLAG_CHAR):
                    logger.debug("Message was a command.")
                    self.parse(received_message.body)
                else:
                    logger.debug("Message was generic.")
                    self.send_to_all(received_message)
            else:
                logger.info("Message received from an unregistered client.")
                self.attempt_to_register(received_message)

    def parse(self, message: Message):
        """
		Try to make sense out of a command sent to the server from a registered
		client.

		message - a message object
		"""
        pass

    def register_hosting_client(self, username: str):
        """
		Registers the hosting client's username with the registry.

		username - a client's username
		"""
        if self.validate_name(username):
            self.registry.register(username, 'local')

    def attempt_to_register(self, message: Message):
        """
		Called when a message is received from an unregistered client. Tries to
		match the sent message with the proper registration format. If it can't
		register the client, the client is ignored.

		message - a Message object to parse.
		"""
        logger.info("Attempting to register client.")

        successful_parse = re.match(r'\/regi (.{1,30})', message.body)

        if successful_parse and self.validate_name(successful_parse.group(1)):
            logger.info("Client successfully registered.")
            self.registry.register(successful_parse.group(1), message.sender)
        else:
            logger.info("Client not registered")  # Ignore the message

    def validate_name(self, username: str) -> bool:
        """
		Checks to see if the username is valid.

		username - a string for the registering client's username
		"""
        return not self.registry.name_taken(username)

    def send(self, message_body: str, target: str):
        """
		Sends a message to a client. If the message fails to send, the target
		is removed from the registry and presumed to be disconnected.

		target - the ip of the message recipient.
		message_body - a string to send the target.
		"""
        if target == 'local':
            self.client_process(message_body)
        else:
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
                try:
                    sock.settimeout(1)
                    sock.connect((target, self.channel_port))
                    sock.send(message_body.encode())
                except socket.timeout:
                    self.registry.delete_ip(target)

    def send_to_all(self, message: Message):
        """
		Sends a message to all ips in the registry. Appends the username before
		sending the message.

		message - a message object
		"""
        to_send = self.registry.get_user(message.sender) + ": " + message.body

        for ip in self.registry.ip():
            self.send(to_send, ip)

    def send_as_hosting_user(self, message_body: str):
        """
		Sends a message under the server's registered user name.

		message_body - a string to send
		"""
        self.receiver.receive(Message(message_body, 'local'))
    all_services[i % len(all_services)] for i in [provider, provider + 1]
]
print("Provider {} starting as {} with services".format(provider, mailbox_id),
      services)

names_bindings = {
    'people': "#.ppl.#",
    'satellites': "#.sat.#",
    'cargo': "#.cgo.#"
}

exchange_name = 'business'
admin_ex_name = 'admin'

# administrative message queue:
receiver = MessageReceiver(mailbox_id)
receiver.bind_to_exchange(
    admin_ex_name, ['#.' + mailbox_id + '.#', '#.providers.#', '#.all.#'])
admin_thread = threading.Thread(target=receiver.start_receiving)
admin_thread.start()

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.exchange_declare(exchange=exchange_name, exchange_type='topic')


def callback(ch, method, properties, body):
    print("Provider {} received {}".format(provider, body))
    order_data = body.decode('utf-8').split()
from message_receiver import MessageReceiver
import threading

business_ex_name = 'business'
admin_ex_name = 'admin'

# exchange

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.exchange_declare(exchange=admin_ex_name, exchange_type='topic')

# sniffer queue:
receiver = MessageReceiver('admin_inbox')
receiver.bind_to_exchange(business_ex_name, ['#'])
admin_thread = threading.Thread(target=receiver.start_receiving)
admin_thread.start()

# read input and send messages
while True:
    command = input("Admin console: ")
    if command in ['q', 'quit', 'exit']:
        break
    try:
        [r_key, msg] = command.split(" ", 1)
        body = "Admin to {}: {}".format(r_key, msg)
        channel.basic_publish(exchange=admin_ex_name,
                              routing_key=r_key,
                              body=body)