Improved ping service
This commit is contained in:
parent
d5c3ea7028
commit
45b56ea924
@ -5,6 +5,7 @@ import syncplay
|
|||||||
from functools import wraps
|
from functools import wraps
|
||||||
import time
|
import time
|
||||||
from syncplay.messages import getMessage
|
from syncplay.messages import getMessage
|
||||||
|
from syncplay.constants import PING_MOVING_AVERAGE_WEIGHT
|
||||||
|
|
||||||
|
|
||||||
class JSONCommandProtocol(LineReceiver):
|
class JSONCommandProtocol(LineReceiver):
|
||||||
@ -426,29 +427,28 @@ class PingService(object):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._rtt = 0
|
self._rtt = 0
|
||||||
self._t0 = None
|
|
||||||
self._fdDiff = 0
|
|
||||||
self._fd = 0
|
self._fd = 0
|
||||||
|
self._avrRtt = 0
|
||||||
|
|
||||||
def newTimestamp(self):
|
def newTimestamp(self):
|
||||||
return time.time()
|
return time.time()
|
||||||
|
|
||||||
def receiveMessage(self, timestamp, senderRtt):
|
def receiveMessage(self, timestamp, senderRtt):
|
||||||
prevRtt = self._rtt
|
|
||||||
if(not timestamp):
|
if(not timestamp):
|
||||||
return
|
return
|
||||||
self._rtt = time.time() - timestamp
|
self._rtt = time.time() - timestamp
|
||||||
if(self._t0 == None and self._rtt > 0 and prevRtt):
|
if(self._rtt < 0 or senderRtt < 0):
|
||||||
self._t0 = self._rtt / 2
|
|
||||||
return
|
return
|
||||||
if(senderRtt <= 0 or not prevRtt):
|
if(not self._avrRtt):
|
||||||
return
|
self._avrRtt = self._rtt
|
||||||
self._fdDiff = self._fdDiff + (prevRtt - senderRtt)
|
self._avrRtt = self._avrRtt * PING_MOVING_AVERAGE_WEIGHT + self._rtt * (1 - PING_MOVING_AVERAGE_WEIGHT)
|
||||||
self._fd = abs(self._t0 - self._fdDiff)
|
if(senderRtt < self._rtt):
|
||||||
|
self._fd = self._avrRtt/2 + (self._rtt - senderRtt)
|
||||||
|
else:
|
||||||
|
self._fd = self._avrRtt/2
|
||||||
|
|
||||||
def getLastForwardDelay(self):
|
def getLastForwardDelay(self):
|
||||||
return self._fd
|
return self._fd
|
||||||
|
|
||||||
def getRtt(self):
|
def getRtt(self):
|
||||||
return self._rtt
|
return self._rtt
|
||||||
|
|
||||||
|
|||||||
@ -204,6 +204,8 @@ class SyncFactory(Factory):
|
|||||||
|
|
||||||
def updateWatcherState(self, watcherProtocol, position, paused, doSeek, messageAge):
|
def updateWatcherState(self, watcherProtocol, position, paused, doSeek, messageAge):
|
||||||
watcher = self.getWatcher(watcherProtocol)
|
watcher = self.getWatcher(watcherProtocol)
|
||||||
|
if(not watcher):
|
||||||
|
return
|
||||||
watcher.lastUpdate = time.time()
|
watcher.lastUpdate = time.time()
|
||||||
if(watcher.file):
|
if(watcher.file):
|
||||||
oldPosition = self._roomStates[watcher.room]["position"]
|
oldPosition = self._roomStates[watcher.room]["position"]
|
||||||
@ -255,6 +257,8 @@ class SyncFactory(Factory):
|
|||||||
|
|
||||||
def watcherSetFile(self, watcherProtocol, file_):
|
def watcherSetFile(self, watcherProtocol, file_):
|
||||||
watcher = self.getWatcher(watcherProtocol)
|
watcher = self.getWatcher(watcherProtocol)
|
||||||
|
if(not watcher):
|
||||||
|
return
|
||||||
watcher.file = file_
|
watcher.file = file_
|
||||||
l = lambda w: w.sendUserSetting(watcher.name, watcher.room, watcher.file, None)
|
l = lambda w: w.sendUserSetting(watcher.name, watcher.room, watcher.file, None)
|
||||||
self.broadcast(watcherProtocol, l)
|
self.broadcast(watcherProtocol, l)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user