diff --git a/syncplay/client.py b/syncplay/client.py index 3d135e9..24a5cdf 100644 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -454,7 +454,11 @@ class SyncplayClient(object): self.userlist.currentUser.room = roomName if resetAutoplay: self.resetAutoPlayState() - + + def sendChat(self,message): + if self._protocol and self._protocol.logged: + self._protocol.sendChatMessage(message) + def sendRoom(self): room = self.userlist.currentUser.room if self._protocol and self._protocol.logged and room: diff --git a/syncplay/constants.py b/syncplay/constants.py index 5cc9e6a..ca77eea 100644 --- a/syncplay/constants.py +++ b/syncplay/constants.py @@ -60,6 +60,7 @@ FILENAME_STRIP_REGEX = u"[-~_\.\[\](): ]" CONTROL_PASSWORD_STRIP_REGEX = u"[^a-zA-Z0-9\-]" ROOM_NAME_STRIP_REGEX = u"^(\+)(?P.*)(:)(\w{12})$" COMMANDS_UNDO = ["u", "undo", "revert"] +COMMANDS_CHAT = ["ch","chat"] COMMANDS_LIST = ["l", "list", "users"] COMMANDS_PAUSE = ["p", "play", "pause"] COMMANDS_ROOM = ["r", "room"] diff --git a/syncplay/messages.py b/syncplay/messages.py index 7a3349b..09c0105 100755 --- a/syncplay/messages.py +++ b/syncplay/messages.py @@ -358,6 +358,7 @@ en = { "server-salt-argument" : "random string used to generate managed room passwords", "server-disable-ready-argument" : u"disable readiness feature", "server-motd-argument": "path to file from which motd will be fetched", + "server-chat-argument" : "Should chat be enabled?", "server-messed-up-motd-unescaped-placeholders": "Message of the Day has unescaped placeholders. All $ signs should be doubled ($$).", "server-messed-up-motd-too-long": "Message of the Day is too long - maximum of {} chars, {} given.", diff --git a/syncplay/protocols.py b/syncplay/protocols.py index a91d429..35cc717 100644 --- a/syncplay/protocols.py +++ b/syncplay/protocols.py @@ -22,6 +22,8 @@ class JSONCommandProtocol(LineReceiver): self.handleState(message[1]) elif command == "Error": self.handleError(message[1]) + elif command == "Chat": + self.handleChat(message[1]) else: self.dropWithError(getMessage("unknown-command-server-error").format(message[1])) # TODO: log, not drop @@ -153,7 +155,8 @@ class SyncClientProtocol(JSONCommandProtocol): def sendFileSetting(self, file_): self.sendSet({"file": file_}) self.sendList() - + def sendChatMessage(self,chatMessage): + self.sendMessage({"Chat": chatMessage}) def handleList(self, userList): self._client.userlist.clearList() for room in userList.iteritems(): @@ -326,7 +329,8 @@ class SyncServerProtocol(JSONCommandProtocol): self._factory.addWatcher(self, username, roomName) self._logged = True self.sendHello(version) - + def handleChat(self,chatMessage): + #TODO def setWatcher(self, watcher): self._watcher = watcher diff --git a/syncplay/server.py b/syncplay/server.py index 3996311..d155896 100644 --- a/syncplay/server.py +++ b/syncplay/server.py @@ -14,7 +14,7 @@ import argparse from syncplay.utils import RoomPasswordProvider, NotControlledRoom, RandomStringGenerator, meetsMinVersion class SyncFactory(Factory): - def __init__(self, password='', motdFilePath=None, isolateRooms=False, salt=None, disableReady=False): + def __init__(self, password='', motdFilePath=None, isolateRooms=False, salt=None, disableReady=False,chat =False): print getMessage("welcome-server-notification").format(syncplay.version) if password: password = hashlib.md5(password).hexdigest() @@ -25,6 +25,7 @@ class SyncFactory(Factory): self._salt = salt self._motdFilePath = motdFilePath self.disableReady = disableReady + self.chat=chat if not isolateRooms: self._roomManager = RoomManager() else: @@ -441,5 +442,6 @@ class ConfigurationGetter(object): self._argparser.add_argument('--password', metavar='password', type=str, nargs='?', help=getMessage("server-password-argument")) self._argparser.add_argument('--isolate-rooms', action='store_true', help=getMessage("server-isolate-room-argument")) self._argparser.add_argument('--disable-ready', action='store_true', help=getMessage("server-disable-ready-argument")) + self._argparser.add_argument('--chat', action='store_true', help=getMessage("server-chat-argument")) self._argparser.add_argument('--salt', metavar='salt', type=str, nargs='?', help=getMessage("server-salt-argument")) self._argparser.add_argument('--motd-file', metavar='file', type=str, nargs='?', help=getMessage("server-motd-argument")) \ No newline at end of file diff --git a/syncplay/ui/consoleUI.py b/syncplay/ui/consoleUI.py index fcaf7cf..94d0dbf 100644 --- a/syncplay/ui/consoleUI.py +++ b/syncplay/ui/consoleUI.py @@ -134,6 +134,9 @@ class ConsoleUI(threading.Thread): self._syncplayClient.playerPositionBeforeLastSeek = tmp_pos elif command.group('command') in constants.COMMANDS_LIST: self._syncplayClient.getUserList() + elif command.group('command') in constants.COMMANDS_CHAT: + message= command.group('parameter') + self._syncplayClient.sendChat(message) elif command.group('command') in constants.COMMANDS_PAUSE: self._syncplayClient.setPaused(not self._syncplayClient.getPlayerPaused()) elif command.group('command') in constants.COMMANDS_ROOM: diff --git a/syncplayServer.py b/syncplayServer.py index b4456d7..aa13653 100755 --- a/syncplayServer.py +++ b/syncplayServer.py @@ -19,6 +19,5 @@ from syncplay.server import SyncFactory, ConfigurationGetter if __name__ == '__main__': argsGetter = ConfigurationGetter() args = argsGetter.getConfiguration() - - reactor.listenTCP(int(args.port), SyncFactory(args.password, args.motd_file, args.isolate_rooms, args.salt, args.disable_ready)) + reactor.listenTCP(int(args.port), SyncFactory(args.password, args.motd_file, args.isolate_rooms, args.salt, args.disable_ready,args.chat)) reactor.run()