Add broadcasts to the website, and delete probably expired web events
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
import time
|
||||
from minecraft.models import Server
|
||||
from json import dumps, JSONEncoder
|
||||
from json import loads, dumps, JSONEncoder
|
||||
import beanstalkc
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
@@ -62,6 +63,7 @@ def server_broadcast(message, *args):
|
||||
for server in Server.objects.all():
|
||||
event = BroadcastEvent(message)
|
||||
send_server_event(server, event)
|
||||
send_web_event(event)
|
||||
|
||||
def user_message(user, message, *args):
|
||||
player = user.minecraftprofile.mc_username
|
||||
@@ -93,10 +95,16 @@ def send_web_event(event):
|
||||
if settings.CAMINUS_USE_BEANSTALKD:
|
||||
queue = beanstalkc.Connection(host=settings.CAMINUS_BEANSTALKD_HOST,
|
||||
port = settings.CAMINUS_BEANSTALKD_PORT)
|
||||
json = dumps(event, cls=EventEncoder)
|
||||
json = dumps({'stamp': time.time(), 'event':event}, cls=EventEncoder)
|
||||
for tube in queue.tubes():
|
||||
if tube.startswith("caminus-web-"):
|
||||
queue.use(tube)
|
||||
pendingJob = queue.peek_ready()
|
||||
if pendingJob:
|
||||
pending = loads(pendingJob.body)
|
||||
if time.time()-pending['stamp'] > 30:
|
||||
print "Deleting expired job", pendingJob.jid
|
||||
pendingJob.delete()
|
||||
queue.put(json)
|
||||
|
||||
def chat(playername, message):
|
||||
|
@@ -140,6 +140,7 @@ class PollHandler(BaseHandler):
|
||||
eventQueue = web_queue(timestamp)
|
||||
event = eventQueue.reserve(timeout=30)
|
||||
if event:
|
||||
pollData['events'].append(json.loads(event.body))
|
||||
eventData = json.loads(event.body)
|
||||
pollData['events'].append(eventData['event'])
|
||||
event.delete()
|
||||
return pollData
|
||||
|
@@ -10,6 +10,8 @@ function pollMessages(id) {
|
||||
$('#chat-display').append("<li><em>"+evt['payload']['player']+" has joined</em></li>");
|
||||
} else if (evt['type'] == 'quit') {
|
||||
$('#chat-display').append("<li><em>"+evt['payload']['player']+" has quit</em></li>");
|
||||
} else if (evt['type'] == 'broadcast') {
|
||||
$('#chat-display').append("<li><strong>"+evt['payload']['message']+"</strong></li>");
|
||||
}
|
||||
});
|
||||
window.setTimeout(function() {pollMessages(data['poll-id'])}, 1);
|
||||
|
Reference in New Issue
Block a user