Advertisement
Guest User

Untitled

a guest
Jul 5th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.23 KB | None | 0 0
  1. import paho.mqtt.client as mqtt
  2. import json
  3. import datetime
  4. from os import remove
  5.  
  6.  
  7. def on_connect(client, userdata, rc):
  8.     client.subscribe('client', 0)
  9.  
  10.  
  11. def on_disconnect(client, userdata, rc):
  12.     client.unsubscribe('client')
  13.     remove('mqtt_started')
  14.  
  15.  
  16. # def on_subscribe(client, userdata, rc):
  17. #     pass
  18.  
  19. # def on_publish(client, userdata, mid):
  20. #     print('Message was published {0]'.format(mid))
  21.  
  22.  
  23. def on_message(client, userdata, msg):
  24.  
  25.     from core.serializer import GameObjectSerializer, GameObjectListSerializer
  26.     from core.models import GameObject, User
  27.     from django.contrib.auth import authenticate
  28.  
  29.     message = json.loads(msg.payload)
  30.     message_type = message['message_type']
  31.  
  32.     if not message_type == 'data':
  33.         login = message['player']['login']
  34.         password = message['player']['password']
  35.  
  36.     if message_type == 'auth':
  37.         message_dict = {}
  38.         # authenticate and authorize!
  39.         user = authenticate(username=login, password=password)
  40.         if user:
  41.             player = user.player
  42.             message_dict = {
  43.                 'message_type': 'auth',
  44.                 'pk': player.pk,
  45.                 'status': 'success',
  46.                 'info': 'Player {0} have been Authorized successfully'.format(login)
  47.             }
  48.             # serialized_player = GameObjectSerializer(player)
  49.             # output_message = json.dumps(serialized_player)
  50.             output_message = json.dumps(message_dict)
  51.             # answer to channel with name as login
  52.             print message_dict['info']
  53.             client.publish(login, output_message)
  54.         else:
  55.             message_dict = {
  56.                 'message_type': 'auth',
  57.                 'status': 'error',
  58.                 'info': 'User {0} has not created. Check your creds'.format(login),
  59.             }
  60.             print message_dict['info']
  61.             output_message = json.dumps(message_dict)
  62.             client.publish(login, output_message)
  63.  
  64.     elif message_type == 'register':
  65.         try:
  66.             user = User.objects.get(username=login)
  67.             message_dict = {
  68.                 'message_type': 'register',
  69.                 'status': 'error',
  70.                 'info': 'Player {0} has already been registered.'.format(user.email),
  71.             }
  72.         except User.DoesNotExist as e:
  73.             User.objects.create(first_name='Guest', email=login, username=login)
  74.             user = User.objects.get(username=login)
  75.             user.set_password(password)
  76.             user.save()
  77.             message_dict = {
  78.                 'message_type': 'register',
  79.                 'status': 'success',
  80.                 'info': 'New player {0} has been registered successfully'.format(login),
  81.             }
  82.         except Exception as e:
  83.             message_dict = {
  84.                 'message_type': 'register',
  85.                 'status': 'error',
  86.                 'info': 'Error: {0}'.format(e.message),
  87.             }
  88.         finally:
  89.             print message_dict['info']
  90.             output_message = json.dumps(message_dict)
  91.             client.publish(login, output_message)
  92.  
  93.     elif message_type == 'data':
  94.         player_as_dict = message['player']
  95.         pk = int(player_as_dict['pk'])
  96.         try:
  97.             player = GameObject.objects.get(pk=pk)
  98.             player.type = player_as_dict['type']
  99.             player.name = player_as_dict['name']
  100.             player.timestamp = datetime.datetime.now().strftime('%d %m %Y, %H:%M:%S')
  101.             player.lat = player_as_dict['lat']
  102.             player.lng = player_as_dict['lng']
  103.             player.radius = 100 #message['radius']
  104.             player.alive = True
  105.             player.online = True
  106.             player.save()
  107.             game_object_list = GameObject.objects.all()
  108.             serialized_game_object_list = GameObjectSerializer(game_object_list, many=True)
  109.             message_dict = {
  110.                 'message_type': 'data',
  111.                 'status': 'success',
  112.                 'info': "{0}'s state was saved successfully".format(player.name),
  113.             }
  114.         except GameObject.DoesNotExist as e:
  115.             message_dict = {
  116.                 'message_type': 'data',
  117.                 'status': 'error',
  118.                 'info': 'Error: {0}'.format(e.message),
  119.             }
  120.         except Exception as e:
  121.             message_dict = {
  122.                 'message_type': 'data',
  123.                 'status': 'error',
  124.                 'info': 'Error: {0}'.format(e.message),
  125.             }
  126.         finally:
  127.             print message_dict['info']
  128.             output_message = json.dumps(serialized_game_object_list.data)
  129.             client.publish('server', output_message)
  130.  
  131.     else:
  132.         message = {
  133.             'error': 'Type of message is not defined',
  134.         }
  135.         output_message = json.dumps(message)
  136.         client.publish('server', output_message)
  137.  
  138. client = mqtt.Client()
  139. client.on_connect = on_connect
  140. client.on_disconnect = on_disconnect
  141. client.on_message = on_message
  142. # client.on_publish = on_publish
  143.  
  144. # client.will_set('client', payload=None, qos=2, retain=False)
  145. client.connect("192.168.1.6", 1883, 60)
  146. # client.connect("10.10.9.186", 1883, 60)
  147. # client.connect("127.0.0.1", 1883, 60)
  148. # client.loop_forever()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement