· 5 years ago · Aug 27, 2020, 12:00 AM
1import boto3
2import json
3import os
4
5
6db = boto3.resource('dynamodb')
7connections_table = db.Table('hey-multiplayer-services')
8
9
10def lambda_handler(event, context):
11 connection_id = get_connection_id(event)
12 delete_db_item(connection_id)
13 notify_other_connections(connection_id, event)
14 return {
15 'statusCode': 200,
16 'body': json.dumps('Hello from Lambda!')
17 }
18
19
20def notify_other_connections(this_connection_id, event):
21 items = connections_table.scan(ProjectionExpression="connectionId")
22 for item in items["Items"]:
23 print(item)
24 connection_id = item["connectionId"]
25 if connection_id == this_connection_id:
26 continue
27 send_message(this_connection_id, connection_id, event)
28
29
30def send_message(sender_connection_id, reciever_connection_id, event):
31 print("notify {} of {}".format(reciever_connection_id, sender_connection_id))
32 api = boto3.client(
33 'apigatewaymanagementapi',
34 endpoint_url="https://" + event["requestContext"]["domainName"] + "/" + event["requestContext"]["stage"]
35 )
36 api.post_to_connection(
37 Data = json.dumps({
38 "action": "exit",
39 "connectionId": sender_connection_id
40 }),
41 ConnectionId = reciever_connection_id
42 )
43
44
45def get_connection_id(event):
46 return event['requestContext']['connectionId']
47
48
49def delete_db_item(connection_id):
50 connections_table.delete_item(
51 Key = {
52 'connectionId': connection_id
53 }
54 )
55