Advertisement
Guest User

Untitled

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