Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import os
  4. import sys
  5. import subprocess
  6. from threading import Thread
  7. from time import time, sleep
  8. import games
  9. import SocketServer
  10.  
  11. class TCPHandler(SocketServer.BaseRequestHandler):
  12. def handle(self):
  13. self.data = self.request.recv(2048).strip()
  14. data = self.data.split(',')
  15.  
  16. class WatchFolder(Thread):
  17. def __init__(self):
  18. global spawn_dir
  19. self.path_to_watch = spawn_dir
  20. self.servers = []
  21. Thread.__init__(self)
  22.  
  23. def checkfile(self, file_name):
  24. spawn_file = '%s/%s' % (self.path_to_watch, file_name)
  25.  
  26. f = open(spawn_file)
  27. lines = f.readlines()
  28.  
  29. values = {}
  30. values['port'] = '27015'
  31. values['sname'] = 'Serverbooking.com'
  32. values['map'] = 'de_dust2'
  33. values['players'] = '12'
  34. values['rcon_pwd'] = 'funkypowa'
  35. values['pwd'] = 'lol'
  36. values['book_time'] = '1'
  37. values['book_game'] = 'cstrike'
  38.  
  39. if 'SOMETHING' in lines[0]:
  40. print 'input file is valid. fetching configuration ..'
  41.  
  42. for line in lines[1:]:
  43. print line
  44. line = line.replace('\n', '')
  45. val = line.split('=')
  46. values[val[0]] = val[1]
  47.  
  48. print 'starting new server ..'
  49. self.servers.append(Server(values))
  50.  
  51. f.close()
  52. os.remove(spawn_file)
  53. print 'input file removed.'
  54. return
  55.  
  56. def run(self):
  57. while 1:
  58. for f in os.listdir(self.path_to_watch):
  59. self.checkfile(f)
  60.  
  61. for server in self.servers:
  62. if not server.started:
  63. server.start()
  64. if server.expired():
  65. print 'server expired ..'
  66. server.stopserver()
  67. self.servers.remove(server)
  68. sleep(20)
  69.  
  70. class Server(Thread):
  71. def __init__(self, values):
  72. reload(games)
  73. game = games.games_list(values['book_game'])
  74. self.game_dir = game[0]
  75. self.game_file = game[1]
  76. self.port = values['port']
  77. self.hostname = values['sname']
  78. self.map = game[2]
  79. self.players = values['players']
  80. self.rcon_password = values['rcon_pwd']
  81. self.password = values['pwd']
  82. self.game = values['book_game']
  83. self.start_cmd = games.game_cmd(self)
  84.  
  85. self.expire_time = time() + (int(values['book_time']) * (60 * 60))
  86.  
  87. self.started = 0
  88.  
  89. self.p = None
  90. self.screen = None
  91.  
  92. Thread.__init__(self)
  93.  
  94. def expired(self):
  95. #print '%s -> %s' % (self.expire_time, time())
  96. if self.expire_time < time():
  97. return 1
  98. else:
  99. return 0
  100.  
  101. def started(self):
  102. return self.started
  103.  
  104. def stopserver(self):
  105. print 'stopping server .. (%s)' % self.port
  106. #kill_line = 'screen -R p%s -X kill' % self.port
  107. #kill_line = 'kill $(ps -ef | grep "SCREEN -dmS p%s" | cut -d" " -f6)' % self.port
  108. #print kill_line
  109. #os.system(kill_line)
  110. #kill_line = 'kill $(ps -ef | grep "SCREEN -dmS p%s" | cut -d" " -f7)' % self.port
  111. #os.system(kill_line)
  112. # screen -dRR p27015 -X kill
  113.  
  114. os.system('kill $(screen -ls | grep p%s | cut -f2 | cut -d. -f1)' % str(self.port))
  115.  
  116. helper = ConnHelper()
  117. helper.free_server(self.port)
  118. return
  119.  
  120. def run(self):
  121. self.started = 1
  122. print 'server is booting ..'
  123. # LINE BELOW IS THE COMMAND TO START THE SERVER PROCESS, PLEASE EDIT WHEN NESCESSARY!!
  124. print self.game_dir
  125. print self.game_file
  126. self.p = subprocess.Popen(self.start_cmd, shell=True, stdout=subprocess.PIPE)
  127. #self.screen = subprocess.Popen('screen -r p%s' % self.port, shell=True, stdout=subprocess.PIPE)
  128. '''
  129. Server output logger
  130. Things that should be done to interact with server in any way,
  131. should be written in loop below:
  132. '''
  133. while 1:
  134. #line = self.screen.communicate()[0]
  135. #print line
  136. sleep(300) # sleep for 5 minutes.
  137.  
  138. WatchFolder().start()
  139. tcpserver = SocketServer.TCPServer(('', 9999), TCPHandler)
  140. tcpserver.serve_forever()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement