Added MOTD for server (#15)
This commit is contained in:
parent
927d55f6a5
commit
d6eb5259d2
@ -105,6 +105,8 @@ en = {
|
|||||||
"server-port-argument" : 'server TCP port',
|
"server-port-argument" : 'server TCP port',
|
||||||
"server-password-argument" : 'server password',
|
"server-password-argument" : 'server password',
|
||||||
"server-isolate-room-argument" : 'should rooms be isolated?',
|
"server-isolate-room-argument" : 'should rooms be isolated?',
|
||||||
|
"server-motd-argument": "path to file from which motd will be fetched",
|
||||||
|
"server-messed-up-motd": "Message of the Day has unescaped placeholders. All $ signs should be doubled ($$).",
|
||||||
|
|
||||||
#Server errors
|
#Server errors
|
||||||
"unknown-command-server-error" : "Unknown command\n%s", #message
|
"unknown-command-server-error" : "Unknown command\n%s", #message
|
||||||
|
|||||||
@ -77,10 +77,11 @@ class SyncClientProtocol(JSONCommandProtocol):
|
|||||||
username = hello["username"] if hello.has_key("username") else None
|
username = hello["username"] if hello.has_key("username") else None
|
||||||
roomName = hello["room"]["name"] if hello.has_key("room") else None
|
roomName = hello["room"]["name"] if hello.has_key("room") else None
|
||||||
version = hello["version"] if hello.has_key("version") else None
|
version = hello["version"] if hello.has_key("version") else None
|
||||||
return username, roomName, version
|
motd = hello["motd"] if hello.has_key("motd") else None
|
||||||
|
return username, roomName, version, motd
|
||||||
|
|
||||||
def handleHello(self, hello):
|
def handleHello(self, hello):
|
||||||
username, roomName, version = self._extractHelloArguments(hello)
|
username, roomName, version, motd = self._extractHelloArguments(hello)
|
||||||
if(not username or not roomName or not version):
|
if(not username or not roomName or not version):
|
||||||
self.dropWithError(getMessage("en", "hello-server-error").format(hello))
|
self.dropWithError(getMessage("en", "hello-server-error").format(hello))
|
||||||
elif(version.split(".")[0:2] != syncplay.version.split(".")[0:2]):
|
elif(version.split(".")[0:2] != syncplay.version.split(".")[0:2]):
|
||||||
@ -89,6 +90,8 @@ class SyncClientProtocol(JSONCommandProtocol):
|
|||||||
self._client.setUsername(username)
|
self._client.setUsername(username)
|
||||||
self._client.setRoom(roomName)
|
self._client.setRoom(roomName)
|
||||||
self.logged = True
|
self.logged = True
|
||||||
|
if(motd):
|
||||||
|
self._client.ui.showMessage(motd, True, True)
|
||||||
self._client.ui.showMessage(getMessage("en", "connected-successful-notification"))
|
self._client.ui.showMessage(getMessage("en", "connected-successful-notification"))
|
||||||
self._client.sendFile()
|
self._client.sendFile()
|
||||||
|
|
||||||
@ -283,10 +286,13 @@ class SyncServerProtocol(JSONCommandProtocol):
|
|||||||
|
|
||||||
def sendHello(self):
|
def sendHello(self):
|
||||||
hello = {}
|
hello = {}
|
||||||
hello["username"] = self._factory.watcherGetUsername(self)
|
username = self._factory.watcherGetUsername(self)
|
||||||
|
hello["username"] = username
|
||||||
|
userIp = self.transport.getPeer().host
|
||||||
room = self._factory.watcherGetRoom(self)
|
room = self._factory.watcherGetRoom(self)
|
||||||
if(room): hello["room"] = {"name": room}
|
if(room): hello["room"] = {"name": room}
|
||||||
hello["version"] = syncplay.version
|
hello["version"] = syncplay.version
|
||||||
|
hello["motd"] = self._factory.getMotd(userIp, username, room)
|
||||||
self.sendMessage({"Hello": hello})
|
self.sendMessage({"Hello": hello})
|
||||||
|
|
||||||
@requireLogged
|
@requireLogged
|
||||||
|
|||||||
@ -9,13 +9,17 @@ import time
|
|||||||
from syncplay import constants
|
from syncplay import constants
|
||||||
import threading
|
import threading
|
||||||
from syncplay.messages import getMessage
|
from syncplay.messages import getMessage
|
||||||
|
import codecs
|
||||||
|
import os
|
||||||
|
from string import Template
|
||||||
|
|
||||||
class SyncFactory(Factory):
|
class SyncFactory(Factory):
|
||||||
def __init__(self, password = ''):
|
def __init__(self, password = '', motdFilePath = None):
|
||||||
print getMessage("en", "welcome-server-notification").format(syncplay.version)
|
print getMessage("en", "welcome-server-notification").format(syncplay.version)
|
||||||
if(password):
|
if(password):
|
||||||
password = hashlib.md5(password).hexdigest()
|
password = hashlib.md5(password).hexdigest()
|
||||||
self.password = password
|
self.password = password
|
||||||
|
self._motdFilePath = motdFilePath
|
||||||
self._rooms = {}
|
self._rooms = {}
|
||||||
self._roomStates = {}
|
self._roomStates = {}
|
||||||
self._roomUpdate = threading.RLock()
|
self._roomUpdate = threading.RLock()
|
||||||
@ -83,6 +87,18 @@ class SyncFactory(Factory):
|
|||||||
position += timePassedSinceSet
|
position += timePassedSinceSet
|
||||||
return paused, position
|
return paused, position
|
||||||
|
|
||||||
|
def getMotd(self, userIp, username, room):
|
||||||
|
if(self._motdFilePath and os.path.isfile(self._motdFilePath)):
|
||||||
|
tmpl = codecs.open(self._motdFilePath, "r", "utf-8-sig").read()
|
||||||
|
args = dict(version=syncplay.version, userIp=userIp, username=username, room=room)
|
||||||
|
try:
|
||||||
|
return Template(tmpl).substitute(args)
|
||||||
|
except ValueError:
|
||||||
|
print getMessage("en", "server-messed-up-motd")
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
return ""
|
||||||
|
|
||||||
def sendState(self, watcherProtocol, doSeek = False, senderLatency = 0, forcedUpdate = False):
|
def sendState(self, watcherProtocol, doSeek = False, senderLatency = 0, forcedUpdate = False):
|
||||||
watcher = self.getWatcher(watcherProtocol)
|
watcher = self.getWatcher(watcherProtocol)
|
||||||
if(not watcher):
|
if(not watcher):
|
||||||
|
|||||||
@ -206,3 +206,4 @@ class ServerConfigurationGetter(object):
|
|||||||
self._argparser.add_argument('--port', metavar='port', type=str, nargs='?', help=getMessage("en", "server-port-argument"))
|
self._argparser.add_argument('--port', metavar='port', type=str, nargs='?', help=getMessage("en", "server-port-argument"))
|
||||||
self._argparser.add_argument('--password', metavar='password', type=str, nargs='?', help=getMessage("en", "server-password-argument"))
|
self._argparser.add_argument('--password', metavar='password', type=str, nargs='?', help=getMessage("en", "server-password-argument"))
|
||||||
self._argparser.add_argument('--isolate-rooms', action='store_true', help=getMessage("en", "server-isolate-room-argument"))
|
self._argparser.add_argument('--isolate-rooms', action='store_true', help=getMessage("en", "server-isolate-room-argument"))
|
||||||
|
self._argparser.add_argument('--motd-file', metavar='motd', type=str, nargs='?', help=getMessage("en", "server-motd-argument"))
|
||||||
|
|||||||
@ -9,7 +9,7 @@ from syncplay.ui.ConfigurationGetter import ServerConfigurationGetter
|
|||||||
argsGetter = ServerConfigurationGetter()
|
argsGetter = ServerConfigurationGetter()
|
||||||
args = argsGetter.getConfiguration()
|
args = argsGetter.getConfiguration()
|
||||||
if(not args.isolate_rooms):
|
if(not args.isolate_rooms):
|
||||||
reactor.listenTCP(int(args.port), SyncFactory(args.password))
|
reactor.listenTCP(int(args.port), SyncFactory(args.password, args.motd_file))
|
||||||
else:
|
else:
|
||||||
reactor.listenTCP(int(args.port), SyncIsolatedFactory(args.password))
|
reactor.listenTCP(int(args.port), SyncIsolatedFactory(args.password, args.motd_file))
|
||||||
reactor.run()
|
reactor.run()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user