Revert "Revert "reduce polling load by condensing the json poll api into one method instead of several""
This reverts commit 1d32ea66c4
.
This commit is contained in:
@@ -8,6 +8,7 @@ from django.http import HttpResponse
|
||||
from urllib2 import urlopen
|
||||
import json
|
||||
from datetime import datetime
|
||||
from models import cachePlayerList
|
||||
|
||||
class WhitelistHandler(AnonymousBaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
@@ -114,3 +115,16 @@ class ServerPingHandler(BaseHandler):
|
||||
|
||||
def read(self, request):
|
||||
return {'identity': request.server}
|
||||
|
||||
class PollHandler(BaseHandler):
|
||||
allowed_methods = ('GET',)
|
||||
|
||||
def read(self, request, timestamp):
|
||||
serverInfo = cache.get('caminus-server-info')
|
||||
if serverInfo == None:
|
||||
cachePlayerList()
|
||||
pollData = {'server-info': {}, 'user-info': {}}
|
||||
pollData['server-info'] = cache.get('caminus-server-info')
|
||||
if not request.user.is_anonymous():
|
||||
pollData['user-info']['balance'] = request.user.minecraftprofile.currencyaccount.balance
|
||||
return pollData
|
||||
|
@@ -0,0 +1,17 @@
|
||||
from django.db.models.signals import post_save
|
||||
from minecraft.models import PlayerSession, Server
|
||||
from django.core.cache import cache
|
||||
|
||||
def cachePlayerList():
|
||||
serverInfo = {}
|
||||
for s in Server.objects.all():
|
||||
playerList = []
|
||||
for p in s.online_players():
|
||||
playerList.append(p.name)
|
||||
serverInfo[s.hostname] = {'players':playerList}
|
||||
cache.set('caminus-server-info', serverInfo, 30)
|
||||
|
||||
def update_player_lists(sender, instance, created, **kwargs):
|
||||
cachePlayerList()
|
||||
|
||||
post_save.connect(update_player_lists, sender=PlayerSession)
|
||||
|
@@ -47,4 +47,5 @@ urlpatterns = patterns('api',
|
||||
url(r'^server/economy/(?P<playername>.*)$', ServerResource(handlers.EconomyHandler)),
|
||||
url(r'^server/session/(?P<playername>.*)/new$', ServerResource(handlers.NewPlayerSessionHandler)),
|
||||
url(r'^server/session/(?P<playername>.*)/close$', ServerResource(handlers.ClosePlayerSessionHandler)),
|
||||
url(r'^poll/(?P<timestamp>[0-9]+)$', Resource(handlers.PollHandler)),
|
||||
)
|
||||
|
Reference in New Issue
Block a user