Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import os
- import sys
- import subprocess
- from threading import Thread
- from time import time, sleep
- import games
- import SocketServer
- class TCPHandler(SocketServer.BaseRequestHandler):
- def handle(self):
- self.data = self.request.recv(2048).strip()
- data = self.data.split(',')
- class WatchFolder(Thread):
- def __init__(self):
- global spawn_dir
- self.path_to_watch = spawn_dir
- self.servers = []
- Thread.__init__(self)
- def checkfile(self, file_name):
- spawn_file = '%s/%s' % (self.path_to_watch, file_name)
- f = open(spawn_file)
- lines = f.readlines()
- values = {}
- values['port'] = '27015'
- values['sname'] = 'Serverbooking.com'
- values['map'] = 'de_dust2'
- values['players'] = '12'
- values['rcon_pwd'] = 'funkypowa'
- values['pwd'] = 'lol'
- values['book_time'] = '1'
- values['book_game'] = 'cstrike'
- if 'SOMETHING' in lines[0]:
- print 'input file is valid. fetching configuration ..'
- for line in lines[1:]:
- print line
- line = line.replace('\n', '')
- val = line.split('=')
- values[val[0]] = val[1]
- print 'starting new server ..'
- self.servers.append(Server(values))
- f.close()
- os.remove(spawn_file)
- print 'input file removed.'
- return
- def run(self):
- while 1:
- for f in os.listdir(self.path_to_watch):
- self.checkfile(f)
- for server in self.servers:
- if not server.started:
- server.start()
- if server.expired():
- print 'server expired ..'
- server.stopserver()
- self.servers.remove(server)
- sleep(20)
- class Server(Thread):
- def __init__(self, values):
- reload(games)
- game = games.games_list(values['book_game'])
- self.game_dir = game[0]
- self.game_file = game[1]
- self.port = values['port']
- self.hostname = values['sname']
- self.map = game[2]
- self.players = values['players']
- self.rcon_password = values['rcon_pwd']
- self.password = values['pwd']
- self.game = values['book_game']
- self.start_cmd = games.game_cmd(self)
- self.expire_time = time() + (int(values['book_time']) * (60 * 60))
- self.started = 0
- self.p = None
- self.screen = None
- Thread.__init__(self)
- def expired(self):
- #print '%s -> %s' % (self.expire_time, time())
- if self.expire_time < time():
- return 1
- else:
- return 0
- def started(self):
- return self.started
- def stopserver(self):
- print 'stopping server .. (%s)' % self.port
- #kill_line = 'screen -R p%s -X kill' % self.port
- #kill_line = 'kill $(ps -ef | grep "SCREEN -dmS p%s" | cut -d" " -f6)' % self.port
- #print kill_line
- #os.system(kill_line)
- #kill_line = 'kill $(ps -ef | grep "SCREEN -dmS p%s" | cut -d" " -f7)' % self.port
- #os.system(kill_line)
- # screen -dRR p27015 -X kill
- os.system('kill $(screen -ls | grep p%s | cut -f2 | cut -d. -f1)' % str(self.port))
- helper = ConnHelper()
- helper.free_server(self.port)
- return
- def run(self):
- self.started = 1
- print 'server is booting ..'
- # LINE BELOW IS THE COMMAND TO START THE SERVER PROCESS, PLEASE EDIT WHEN NESCESSARY!!
- print self.game_dir
- print self.game_file
- self.p = subprocess.Popen(self.start_cmd, shell=True, stdout=subprocess.PIPE)
- #self.screen = subprocess.Popen('screen -r p%s' % self.port, shell=True, stdout=subprocess.PIPE)
- '''
- Server output logger
- Things that should be done to interact with server in any way,
- should be written in loop below:
- '''
- while 1:
- #line = self.screen.communicate()[0]
- #print line
- sleep(300) # sleep for 5 minutes.
- WatchFolder().start()
- tcpserver = SocketServer.TCPServer(('', 9999), TCPHandler)
- tcpserver.serve_forever()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement