40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
|
import Queue
|
||
|
import threading
|
||
|
import time
|
||
|
|
||
|
from bmconfigparser import BMConfigParser
|
||
|
from debug import logger
|
||
|
from helper_threading import StoppableThread
|
||
|
from network.bmproto import BMProto
|
||
|
from network.connectionpool import BMConnectionPool
|
||
|
from network.udp import UDPSocket
|
||
|
import protocol
|
||
|
import state
|
||
|
|
||
|
class AnnounceThread(threading.Thread, StoppableThread):
|
||
|
def __init__(self):
|
||
|
threading.Thread.__init__(self, name="AnnounceThread")
|
||
|
self.initStop()
|
||
|
self.name = "AnnounceThread"
|
||
|
BMConnectionPool()
|
||
|
logger.error("init announce thread")
|
||
|
|
||
|
def run(self):
|
||
|
lastSelfAnnounced = 0
|
||
|
while not self._stopped:
|
||
|
processed = 0
|
||
|
if lastSelfAnnounced < time.time() - UDPSocket.announceInterval:
|
||
|
self.announceSelf()
|
||
|
lastSelfAnnounced = time.time()
|
||
|
if processed == 0:
|
||
|
self.stop.wait(10)
|
||
|
|
||
|
def announceSelf(self):
|
||
|
for connection in BMConnectionPool().udpSockets.values():
|
||
|
for stream in state.streamsInWhichIAmParticipating:
|
||
|
addr = (stream, state.Peer('127.0.0.1', BMConfigParser().safeGetInt("bitmessagesettings", "port")), time.time())
|
||
|
connection.writeQueue.put(BMProto.assembleAddr([addr]))
|
||
|
|
||
|
def stopThread(self):
|
||
|
super(AnnounceThread, self).stopThread()
|