Move all the player queries into the server model object
This commit is contained in:
@@ -1,16 +1,4 @@
|
||||
import pyspy
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
import socket
|
||||
import models
|
||||
|
||||
def server_info(request):
|
||||
players = cache.get('minecraftPlayerList')
|
||||
if players is None:
|
||||
try:
|
||||
client = pyspy.GamespyClient(settings.MINECRAFT_SERVER, settings.MINECRAFT_SERVER_PORT)
|
||||
client.update()
|
||||
players = client.players()
|
||||
cache.set('minecraftPlayerList', players, 120)
|
||||
except socket.error:
|
||||
pass
|
||||
return {'onlinePlayers':players, 'minecraftHost': settings.MINECRAFT_SERVER, 'minecraftPort': settings.MINECRAFT_SERVER_PORT}
|
||||
return {'minecraft_servers': models.Server.objects.all()}
|
||||
|
@@ -0,0 +1,37 @@
|
||||
# encoding: utf-8
|
||||
import datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding field 'Server.query_port'
|
||||
db.add_column('minecraft_server', 'query_port', self.gf('django.db.models.fields.IntegerField')(default=25565), keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting field 'Server.query_port'
|
||||
db.delete_column('minecraft_server', 'query_port')
|
||||
|
||||
|
||||
models = {
|
||||
'minecraft.motd': {
|
||||
'Meta': {'object_name': 'MOTD'},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'server': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['minecraft.Server']"}),
|
||||
'text': ('django.db.models.fields.TextField', [], {})
|
||||
},
|
||||
'minecraft.server': {
|
||||
'Meta': {'object_name': 'Server'},
|
||||
'hostname': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'port': ('django.db.models.fields.IntegerField', [], {'default': '25565'}),
|
||||
'query_port': ('django.db.models.fields.IntegerField', [], {'default': '25565'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['minecraft']
|
@@ -1,8 +1,36 @@
|
||||
from django.db import models
|
||||
import pyspy
|
||||
from django.core.cache import cache
|
||||
import socket
|
||||
|
||||
class Server(models.Model):
|
||||
hostname = models.CharField(max_length=100)
|
||||
port = models.IntegerField(default=25565)
|
||||
query_port = models.IntegerField(default=25565)
|
||||
|
||||
class Meta:
|
||||
permissions = (
|
||||
('login_all', 'Can login to all minecraft servers'),
|
||||
)
|
||||
|
||||
def online_playaers(self):
|
||||
players = cache.get('minecraftPlayerList-%s:%s'%(self.hostname, self.query_port))
|
||||
if players is None:
|
||||
players = []
|
||||
try:
|
||||
client = pyspy.GamespyClient(server.hostname, server.query_port)
|
||||
client.update()
|
||||
pList = client.players()
|
||||
for p in pList:
|
||||
try:
|
||||
player = Player.objects.get(username__exact = p)
|
||||
except ObjectDoesNotExist, e:
|
||||
player = Player()
|
||||
player.username = p
|
||||
cache.set('minecraftPlayerList-%s:%s'%(self.hostname, self.query_port), players, 120)
|
||||
except socket.error:
|
||||
pass
|
||||
return players
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s:%d"%(self.hostname, self.port)
|
||||
|
Reference in New Issue
Block a user