Server: Fix overmodulation bug.

This commit is contained in:
Maurizio Porrato 2011-02-20 11:18:04 +01:00
parent 4dea7c4592
commit f09753040c
3 changed files with 11 additions and 5 deletions

View File

@ -114,6 +114,8 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin):
log.msg("Logging out client %s" % self.user)
self.factory.manager.clientLogout(self.factory.serverAuth, self.user)
self.factory.tracker.logout(self)
if self.factory.talking == self:
self.factory.talking = None
self.transport.loseConnection()
def decodeCT(self, body):
@ -158,6 +160,8 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin):
def decodeRX(self, body):
log.msg("RX%d" % int(body))
self.startPinging()
if self.factory.talking == self:
self.factory.talking = None
for c in self.factory.tracker.getClientList(self.user.NT):
cp = self.factory.tracker.getClientProtocol(c.ID).startPinging()
@ -182,8 +186,10 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin):
def decodeTX(self, body):
if body == '0':
if not self.factory.tracker.isMute(self.user.ID):
ih,il = divmod(self.getIndex(), 256)
self.transport.write(chr(1)+chr(ih)+chr(il))
if not self.factory.talking:
self.factory.talking = self
ih,il = divmod(self.getIndex(), 256)
self.transport.write(chr(1)+chr(ih)+chr(il))
elif body == '1':
self.stopPinging()
self.expectRawData(325)
@ -261,7 +267,7 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin):
def audioFrameReceived(self, frame):
#log.msg("audioFrameReceived")
if self.factory.tracker.canTalk(self.user.ID):
if self.factory.tracker.canTalk(self.user.ID) and self.factory.talking == self:
clientIdx = self.getIndex()
for c in self.factory.tracker.getClientList(self.user.NT):
if int(c.S) < 2 and c.ID != self.user.ID:

View File

@ -29,7 +29,7 @@ if __name__ == '__main__':
def databaseManagerFactory():
log.msg("Building DatabaseManager")
return DatabaseManager(
ConnectionPool("sqlite3", "/tmp/frnmanager.sqlite3", cp_noisy=True))
ConnectionPool("sqlite3", "/tmp/frnmanager.sqlite3", check_same_thread=False, cp_noisy=True))
reactor.listenTCP(10025, FRNManagerServerFactory(
databaseManagerFactory

View File

@ -63,7 +63,7 @@ class FRNCrosslinkClient(FRNClient):
role = factory.connection.serverdata.get('AL', None)
if role in ['OK', 'ADMIN', 'OWNER']:
for c in factory.connection.clients:
ss = cStatus.get(c['s'], '?')
ss = cStatus.get(c['S'], '?')
if c['M'] != '0':
ss = ss.lower()
cl.append(" %s%s %s " % (