Implement server kicks and updating the server time on the page according to heartbeats

This commit is contained in:
Trever Fischer
2012-11-12 14:40:32 -05:00
parent ddd7b0028e
commit 3706219e90
8 changed files with 74 additions and 7 deletions

View File

@@ -1,4 +1,6 @@
import models
def server_info(request):
return {'minecraft_servers': models.Server.objects.all()}
period = models.Server.objects.all()[0].day_period()
return {'minecraft_servers': models.Server.objects.all(),
'first_day_period': period}

View File

@@ -54,6 +54,26 @@ class Server(models.Model):
('login_all', 'Can login to all minecraft servers'),
)
def worlds(self):
data = cache.get('caminus-server-heartbeat-%s'%(self.id))
if data is None:
return {}
return data['worlds']
def current_time_raw(self):
try:
return self.worlds()['world']['time']
except KeyError:
return 0
def current_time(self):
now = self.current_time_raw()
hour = ((now/1000)+8)%24
minute = int(((now/1000.0)%1)*60)
seconds = 0
dt = datetime.time(hour, minute, seconds)
return dt
def online_players(self):
activeSessions = PlayerSession.objects.all().filter(end=None)
players = []
@@ -61,6 +81,12 @@ class Server(models.Model):
players.append(s.player)
return players
def day_period(self):
now = self.current_time()
if now.hour > 8 and now.hour < 17:
return "morning"
return "night"
def __unicode__(self):
return "%s:%d"%(self.hostname, self.port)
@@ -112,3 +138,10 @@ class Ban(models.Model):
def __unicode__(self):
return "%s: %s"%(self.player, self.reason)
import api.events
def kick_banned_user(sender, instance, created, **kwargs):
player = instance.player
if player.isBanned():
api.events.broadcast_server_event(api.events.KickEvent(player.mc_username, instance.reason))
post_save.connect(kick_banned_user, sender=Ban)