Implement server kicks and updating the server time on the page according to heartbeats
This commit is contained in:
@@ -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}
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user