def lambda_handler()

in BackendServices/functions/requestgamesession.py [0:0]


def lambda_handler(event, context):

    sqs_client = boto3.client('sqs')

    # 1. Check SQS Queue if there are sessions available
    # Try to receive message from SQS queue
    try:
        response = sqs_client.receive_message(
            QueueUrl=os.environ['SQS_QUEUE_URL'],
            MaxNumberOfMessages=1,
            VisibilityTimeout=15,
            WaitTimeSeconds=1
        )
        message = response['Messages'][0]
        print(message)
        receipt_handle = message['ReceiptHandle']
        connection_info = message['Body']
        print(receipt_handle)
        print("got session: " + connection_info)

        connection_splitted = connection_info.split(":")
        ip = connection_splitted[0]
        port = connection_splitted[1]

        print("IP: " + ip + " PORT: " + port)

        # Delete received message from queue
        sqs_client.delete_message(
            QueueUrl=os.environ['SQS_QUEUE_URL'],
            ReceiptHandle=receipt_handle
        )

        # Return result to client
        return {
            "statusCode": 200,
            "body": json.dumps({ 'publicIP': ip, 'port': port })
        }
    except:
        print("Failed getting a session from the SQS queue, will try claiming a new one")

    # 2. If not, try to claim a new session through FleetIQ
    client = boto3.client('gamelift')
    response = client.claim_game_server(
        GameServerGroupName='ExampleGameServerGroup',
    )
    print(response)
    connection_info = response["GameServer"]["ConnectionInfo"]
    try:
        connection_splitted = connection_info.split(":")
        ip = connection_splitted[0]
        port = connection_splitted[1]

        print("IP: " + ip + " PORT: " + port)

        # Put a ticket in to the SQS for the next player (we match 1-v-1 sessions)
        response = sqs_client.send_message(
            QueueUrl=os.environ['SQS_QUEUE_URL'],
            MessageBody=(
                connection_info
            )
        )
        print(response['MessageId'])

        return {
            "statusCode": 200,
            "body": json.dumps({ 'publicIP': ip, 'port': port })
        }
    except:
        print("Failed getting a new session")

    # 3. Failed to find a server
    return {
            "statusCode": 500,
            "body": json.dumps({ 'failed': 'couldnt find a free server spot'})
    }