syncplay server changes

This commit is contained in:
danfai 2021-09-15 20:49:25 +02:00
parent d71b7fca78
commit c561b8edf1
3 changed files with 54 additions and 4 deletions

View File

@ -1,10 +1,13 @@
import sys
from twisted.internet import reactor
from twisted.internet import reactor, endpoints
from twisted.internet.endpoints import TCP4ServerEndpoint, TCP6ServerEndpoint
from twisted.internet.error import CannotListenError
from twisted.web import server, resource
from syncplay.server import SyncFactory, ConfigurationGetter
from syncplay.webapi import WebAPI
class ServerStatus: pass
@ -27,6 +30,7 @@ def failed4(f):
print(f.value)
print("IPv4 listening failed.")
def main():
argsGetter = ConfigurationGetter()
args = argsGetter.getConfiguration()
@ -43,6 +47,9 @@ def main():
args.stats_db_file,
args.tls
)
site = server.Site(WebAPI(factory))
endpoint = endpoints.TCP4ServerEndpoint(reactor, 8080)
endpoint.listen(site)
endpoint6 = TCP6ServerEndpoint(reactor, int(args.port))
endpoint6.listen(factory).addCallbacks(isListening6, failed6)
endpoint4 = TCP4ServerEndpoint(reactor, int(args.port))
@ -54,4 +61,5 @@ def main():
sys.exit()
if __name__ == "__main__":
main()
main()

View File

@ -260,6 +260,9 @@ class SyncFactory(Factory):
if self._TLSattempts < constants.TLS_CERT_ROTATION_MAX_RETRIES:
self.serverAcceptsTLS = True
def _getRoomManager(self):
return self._roomManager
class StatsRecorder(object):
def __init__(self, dbHandle, roomManager):
@ -356,8 +359,9 @@ class RoomManager(object):
return room
def _deleteRoomIfEmpty(self, room):
if room.isEmpty() and room.getName() in self._rooms:
del self._rooms[room.getName()]
#if room.isEmpty() and room.getName() in self._rooms:
# del self._rooms[room.getName()]
print("Would delete room: " + room.getName())
def findFreeUsername(self, username):
username = truncateText(username, constants.MAX_USERNAME_LENGTH)

38
syncplay/webapi.py Normal file
View File

@ -0,0 +1,38 @@
from syncplay.utils import RoomPasswordProvider, NotControlledRoom, RandomStringGenerator, meetsMinVersion, playlistIsValid, truncateText
from twisted.web import server, resource
import syncplay
from syncplay import constants
import json
class WebAPI(resource.Resource):
isLeaf = True
def __init__(self, factory):
self._factory = factory
def render_GET(self, request):
return (b"<!DOCTYPE html><html><head><meta charset='utf-8'>"
b"<title></title></head><body>"
b"<form method='POST'><input name='room'><input name='url'></form>")
def render_POST(self, request):
url = ""
r = ""
if b"url" in request.args and b"room" in request.args:
url = request.args[b"url"][0].decode("utf-8")
r = request.args[b"room"][0].decode("utf-8")
else:
obj = json.load(request.content)
#print(obj)
url = obj["text"]
r = obj["channel_name"]
room = self._factory._getRoomManager()._getRoom(r)
pl = room.getPlaylist()
pl += [url]
room.setPlaylist(pl)
#print("Room: " + r + " - adding: " + url)
for receiver in room.getWatchers():
receiver.setPlaylist(room.getName(), room.getPlaylist())
return b"<html>Inserted</html>"