Move all the player queries into the server model object

This commit is contained in:
Trever Fischer
2012-03-02 14:51:05 -05:00
parent c2e9eff169
commit d87095fe2c
3 changed files with 67 additions and 14 deletions

View File

@@ -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()}

View File

@@ -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']

View File

@@ -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)