예제 #1
0
def init_peers(port):
    global local_peer
    local_peer = Peer(get_local_ip(), port)
    add_peer(local_peer)
    debug.output(debug.info, '[init_peers] start to look for peers')
    find_peers()
    debug.output(debug.info, '[init_peers] look for peers ended')
    debug.output(debug.info, '[init_peers] broadcast known peers')
    network.broadcast_message(messages.PeersMessage(get_known_peers()))
    debug.output(debug.info, '[init_peers] broadcasted known peers')
예제 #2
0
def broadcast_message(msg):
    for peer in list(peers.get_known_peers()):
        if peer != peers.get_local_peer():
            debug.output(debug.info, '[broadcast] send %s to ' % str(type(msg)) + str(peer))
            sender = client.Sender(peer)
            sender.send_message(msg)
            debug.output(debug.info, '[broadcast] sent %s to ' % str(type(msg)) + str(peer))
            del sender
            debug.output(debug.info, '[broadcast] close connection to ' + str(peer))
예제 #3
0
파일: client.py 프로젝트: Cylizx/network
    def send_message(self, msg):
        if not self.connected:
            debug.output(debug.verbose,
                         '[sender] try connect to %s' % str(self.peer))
            self.s.connect((self.peer.ip, self.peer.port))
            self.connected = True
            debug.output(debug.verbose,
                         '[sender] connected to %s' % str(self.peer))

        debug.output(debug.verbose,
                     '[sender] send %s to %s' % (str(msg), str(self.peer)))
        content = wrap_message(msg)
        self.s.send(content)
        content_length = int(receive(self.s, 10))
        return decode_from_bytes(receive(self.s, content_length))
예제 #4
0
def find_peers():
    global known_peers
    for peer in list(known_peers):
        if peer == get_local_peer():
            continue
        debug.output(debug.info,
                     '[find_peers] send GetPeersMessage to ' + str(peer))
        sender = client.Sender(peer)
        peers_message = sender.send_message(messages.GetPeersMessage())
        debug.output(debug.info,
                     '[find_peers] sent GetPeersMessage to ' + str(peer))
        for new_peer in peers_message.peers:
            add_peer(new_peer)
        del sender
        debug.output(debug.info,
                     '[find_peers] close connection to ' + str(peer))
예제 #5
0
 def handle(self):
     debug.output(
         debug.info,
         '[server] new connection from ' + str(self.client_address))
     content_length = int(receive(self.request, 10))
     msg = decode_from_bytes(receive(self.request, content_length))
     if isinstance(msg, HeartbeatMessage):
         debug.output(debug.info, msg.timestamp)
         self.request.send(wrap_message(HeartbeatMessage()))
     elif isinstance(msg, GetPeersMessage):
         debug.output(
             debug.info, '[server] receive %s from ' % str(type(msg)) +
             str(self.client_address))
         debug.output(debug.info,
                      '[server] send to ' + str(self.client_address))
         self.request.send(
             wrap_message(PeersMessage(peers.get_known_peers())))
         debug.output(debug.info,
                      '[server] sent to ' + str(self.client_address))
     elif isinstance(msg, PeersMessage):
         debug.output(
             debug.info, '[server] receive %s from ' % str(type(msg)) +
             str(self.client_address))
         for peer in msg.peers:
             peers.add_peer(peer)
         self.request.send(wrap_message(HeartbeatMessage()))
     else:
         handle_message(msg)
         self.request.send(wrap_message(HeartbeatMessage()))
     debug.output(debug.info, '[server] exit handle')
예제 #6
0
def handle_message(obj):
    debug.output(debug.info, '[handle_message] receive %s' % str(type(obj)))
    # TODO: jas0n1ee
    # receive an message object
    # return an object as a response
    return
예제 #7
0
def add_peer(peer):
    if peer not in known_peers:
        debug.output(debug.running, '[add_peer] new peer: ' + str(peer))
        known_peers.add(peer)