Exemple #1
0
 def createGameRoom(self, gameroomName, playerIP):
     # check if room name is already taken
     if (gameroomName in self.gameroomNames):
         print("Cannot create. Room with that name already exists")
     else:
         roomData = {
             gameroomName: gameroomName,
             # broker: playerIP,
             #startingCash: startingCash,
             # startingStockHoldings: startingStockHoldings
         }
         newGameroom = GameRoom(roomData)
         self.gameroomNames.append(gameroomName)
         self.gameRooms[gameroomName] = newGameroom
         self.gameRooms[gameroomName]['broker'] = playerIP
         playerIP.sendall('Confirm created room %s' % (gameroomName))
     return
Exemple #2
0
class Map(object):
    
    scenes = {
		'Introduction': Introduction(),
        'Kitchen': Kitchen(),
        'LivingRoom': LivingRoom(),
        'Toilet': Toilet(),
        'Bacement': Bacement(),
		'GameRoom': GameRoom(),
        'Attick': Attick(),
        'Out': Out()
    }
     
    def __init__(self, start_scene):
        self.start_scene = start_scene

    def next_scene(self, scene_name):
        return Map.scenes.get(scene_name)

    def opening_scene(self):
        return self.next_scene(self.start_scene)
Exemple #3
0
def createroom():
    app.logger.debug("JSON received...")
    requestJson = request.get_json(force=True)
    app.logger.debug(requestJson)
    if request.mimetype == 'application/json':
        mydata = request.json
        playerName = mydata.get('playerName')
        gameRoomName = mydata.get('gameRoomName')
        startingCash = mydata.get('startingCash')
        startingStockHoldings = mydata.get('startingStockHoldings')
        return '''
           The player's name is: {}
           The game room's name is: {}
           The starting cash value is: {}
           The starting stock holdings value is: {}'''.format(
            playerName, gameRoomName, startingCash, startingStockHoldings)

        return "playerName is %s in %s" % mydata.get("playerName"), mydata.get(
            "gameRoomName")
    elif request.mimetype == 'application/x-www-form-urlencoded':
        dictObj = request.form.to_dict()
        gameRoom = GameRoom(dictObj)
        return gameRoom
    else:
        return "no json received"

    if request.method == 'POST':
        req_data = request.get_json(force=True)
        app.logger.debug(req_data)
        playerName = req_data['playerName']
        gameRoomName = req_data['gameRoomName']
        startingCash = req_data['startingCash']
        startingStockHoldings = req_data['startingStockHoldings']
        return '''
           The player's name is: {}
           The game room's name is: {}
           The starting cash value is: {}
           The starting stock holdings value is: {}'''.format(
            playerName, gameRoomName, startingCash, startingStockHoldings)
Exemple #4
0
def startClient():
    roomclient = GameRoom()

    BC_PORT = 51425

    s = socket(AF_INET, SOCK_DGRAM)
    s.bind(('', 0))
    s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
    #data = pickle.dumps(roomclient)

    #s.sendto("request to join in the game", ('<broadcast>', BC_PORT))
    data = {'Name': 'request', 'Source': sys.argv[1]}

    print "sys.argv + room1.localName:"
    print GameRoom.localName

    data_encoded = json.dumps(data)
    print data_encoded
    data_decoded = json.loads(data_encoded)
    print data_decoded

    s.sendto(data_encoded, ('<broadcast>', BC_PORT))
    #s.sendto(data_encoded, ('127.0.0.1', BC_PORT))
    s.close()
Exemple #5
0
import socket, traceback
from GameRoom import GameRoom
import pickle
import json
import ui
from threading import Thread
import time

room1 = GameRoom()
room1.init4Players()
room1.printPlayers()


def convert_to_builtin_type(obj):
    print 'default(', repr(obj), ')'
    # Convert objects to a dictionary of their representation
    d = {
        '__class__': obj.__class__.__name__,
        '__module__': obj.__module__,
    }
    d.update(obj.__dict__)
    return d


def dict_to_object(d):
    if '__class__' in d:
        class_name = d.pop('__class__')
        module_name = d.pop('__module__')
        module = __import__(module_name)
        print 'MODULE:', module
        class_ = getattr(module, class_name)
Exemple #6
0
 def create_game_room(self, curr_pos):
     self.site_list[curr_pos] = GameRoom(curr_pos, self)
     self.site_list[curr_pos].sell_site(None, self.game.seatInfo[self.game.curr_player_id].character)
     self.site_list[curr_pos].enter_site(self.game.seatInfo[self.game.curr_player_id])
Exemple #7
0
def startServer():
    roomLimit = int(sys.argv[2])
    room1 = GameRoom()
    room1.setLocalName(sys.argv[1])
    host = ''                               # Bind to all interfaces
    port = 51425
    dataGame = ''
    data_encoded = ''
    rejoinSuccess = 0
    recoveredFlag = 0

    print room1.localName
    room1.init4Players()


    
    

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.bind((host, port))
    
    
    CONNToGo = ('localhost', 9999)
    
    #def fn_clientToGo(string, *args):
    csToGo = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    csToGo.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
    #csToGo.bind(CONNToGo)

    CONNToUI = ('localhost', 8888)
    
    #def fn_clientToGo(string, *args):
    csToUI = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    csToUI.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
    
    
    while 1:
        try:
			message, address = s.recvfrom(8192*16)
	    #messageFromGo, addressFromGo = csToGo.recvfrom(8192)
	    #print addressFromGo[0]
	    #print "Got data from goServer:", addressFromGo
	    #print messageFromGo

			print address[0]
			print "Got data from", address
			print message
			decoded = json.loads(message)
			messageType = decoded["Name"]
			print decoded["Name"]
			if messageType == "game room info":
				if recoveredFlag == 0:
					recoveredFlag = 1
					print 'start self recovery:'
					# 1. update current room1 update info
					players =  decoded["Players"]
					for player in players:
						playerName = player["Name"]
						playerIP = player["Ip"]
						if room1.checkIfExist(playerName) == 0:
							room1.addNewPlayer(playerName, playerIP)
						# 2. send to self go server the msg
					selfRecoverMsg = obj_to_rejoinMsg(room1, room1.localName)
					data_selfRecoverMsg = json.dumps(selfRecoverMsg)
					csToGo.sendto(data_selfRecoverMsg, CONNToGo)
			# 3. send to self UI the rejoin msg
			#selfRecoverMsgToUI = obj_to_startMsgToUI(room1)
			#data_selfRecoverMsgToUI = json.dumps(selfRecoverMsgToUI)
                	#csToUI.sendto(data_selfRecoverMsgToUI, CONNToUI)


			if messageType == "request":
				source = decoded["Source"]
				print "source + room1.localName+ decoded_source:"
				print source
				print room1.localName
				print decoded["Source"]
				if room1.gameStart == 0:
					if room1.checkIfExist(source) == 0:
						room1.addNewPlayer(source,address[0])
						room1.setPlayerConnected(source)
						room1.printPlayers()
                		#data1 = 'ack'+','+ room1.localName
                		#s.sendto(data1, address)
            #if room1.checkIfExist(message) == 0:
            #    room1.addNewPlayer(message,address[0])
            #    room1.printPlayers()
            #    s.sendto(room1.localName, address)
					if room1.count == roomLimit:
						print 'enter sending to go server:'
						room1.printPlayers()
						dataGame =  obj_to_dict(room1)
						data_encoded = json.dumps(dataGame)
                #data_decoded = jsonpickle.dumps(room1)
						print data_encoded
						data_decoded = json.loads(data_encoded)
						print data_decoded
						csToGo.sendto(data_encoded, CONNToGo)
				#room1.startGame = 1

				if room1.gameStart == 1:
					if room1.checkIfExist(source) == 1:
						print 'send rejoin data to go server:'
						rejoinPlayer = source
						room1.setPlayerConnected(source)
						dataRejoin = obj_to_rejoinMsg(room1, rejoinPlayer)
						data_reJoin = json.dumps(dataRejoin)
						csToGo.sendto(data_reJoin, CONNToGo)
					# send "room info to bsServer:"
						s.sendto(data_reJoin, (address[0],port))
						print json.loads(data_reJoin)
						print 'finish sending rejoin msg to self'
					elif room1.count < roomLimit:
						print 'dynamic join: send new join to go server:'
						room1.addNewPlayer(source,address[0])
						room1.printPlayers()
						dataDynamicJoin = 'ack'+','+GameRoom.localName
						s.sendto(dataDynamicJoin, address)
						print room1.count
				#dataDynamicJoin = {'Name':'game room info', 'Id': room1.id, 'Player': {'Ip': address[0], 'Name':source}, 'Count':room1.count, 'LocalName':room1.localName, 'State':'join'}
						dataDynamicJoin = obj_to_dynamicJoinMsg (room1, source)
						data_DynamicJoin = json.dumps(dataDynamicJoin)
						csToGo.sendto(data_DynamicJoin, CONNToGo)
			
			if messageType == "connection success":
				if room1.gameStart == 0:
					room1.gameStart = 1
					selfRecoverMsgToUI = obj_to_startMsgToUI(room1)
					data_selfRecoverMsgToUI = json.dumps(selfRecoverMsgToUI)
					csToUI.sendto(data_selfRecoverMsgToUI, CONNToUI)

                #csToUI.sendto(data_encoded, CONNToUI)
			if messageType == "gameresult":
				room1.startGame = 0
		#players = decoded["Players"]
		#for player in players:
		#	playerName = player["Name"]
		#	playerScore = player["Score"]
		#	room1.setPlayerScore(playerName, playerScore)
		#room1.printPlayers()

		#for player in players:
		#	playerName = player["Name"]
		#	if playerName != room1.localName:
		#		room1.removePlayer(playerName)
				room1.printPlayers()
				dataGameClose =  obj_to_closeGame(room1)
				data_GameClose = json.dumps(dataGameClose)
                #data_decoded = jsonpickle.dumps(room1)
				print data_GameClose
				data_decoded_GameClose = json.loads(data_GameClose)
				print data_decoded_GameClose
				csToGo.sendto(data_GameClose, CONNToGo)

				time.sleep( 15 )
				if room1.count == roomLimit:
					print 'start a new game after close a game, sending to go server:'
					dataGame =  obj_to_dict(room1)
					data_encoded = json.dumps(dataGame)
                #data_decoded = jsonpickle.dumps(room1)
					print data_encoded
					data_decoded = json.loads(data_encoded)
					print data_decoded
					csToGo.sendto(data_encoded, CONNToGo)
			#room1.startGame = 1
		
			if messageType == "disconnect":
				peer = decoded["Peer"]
				room1.setPlayerDisconnected(peer)
				print '------------ shoulb be 0:-----------' 
				#peer.sayBoth()
				room1.printPlayer(peer)
				print '-------------------------------------' 

				#cancelQuality = {'Name':'disconnect', 'Tank_id': peer}
				#cancelQualityEncoded = json.dumps(cancelQuality)
				#csToUI.sendto(cancelQualityEncoded, CONNToUI)
       
        # Acknowledge it.
        #       s.sendto("allow to join in the game", address)
        except (KeyboardInterrupt, SystemExit):
            raise
        except:
            traceback.print_exc()
Exemple #8
0
import socket, traceback
from GameRoom import GameRoom
import pickle
import json
import ui
from threading import Thread
import time

room1 = GameRoom()
room1.init4Players()
room1.printPlayers()

def convert_to_builtin_type(obj):
    print 'default(', repr(obj), ')'
    # Convert objects to a dictionary of their representation
    d = { '__class__':obj.__class__.__name__, 
        '__module__':obj.__module__,
    }
    d.update(obj.__dict__)
    return d



def dict_to_object(d):
    if '__class__' in d:
        class_name = d.pop('__class__')
        module_name = d.pop('__module__')
        module = __import__(module_name)
        print 'MODULE:', module
        class_ = getattr(module, class_name)
        print 'CLASS:', class_
 def __init__(self, **kwargs):
     self.name = ''
     self.room = GameRoom()