Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import paho.mqtt.client as mqtt
- import json
- import datetime
- from os import remove
- def on_connect(client, userdata, rc):
- client.subscribe('client', 0)
- def on_disconnect(client, userdata, rc):
- client.unsubscribe('client')
- remove('mqtt_started')
- # def on_subscribe(client, userdata, rc):
- # pass
- # def on_publish(client, userdata, mid):
- # print('Message was published {0]'.format(mid))
- def on_message(client, userdata, msg):
- from core.serializer import GameObjectSerializer, GameObjectListSerializer
- from core.models import GameObject, User
- from django.contrib.auth import authenticate
- message = json.loads(msg.payload)
- message_type = message['message_type']
- if not message_type == 'data':
- login = message['player']['login']
- password = message['player']['password']
- if message_type == 'auth':
- message_dict = {}
- # authenticate and authorize!
- user = authenticate(username=login, password=password)
- if user:
- player = user.player
- message_dict = {
- 'message_type': 'auth',
- 'pk': player.pk,
- 'status': 'success',
- 'info': 'Player {0} have been Authorized successfully'.format(login)
- }
- # serialized_player = GameObjectSerializer(player)
- # output_message = json.dumps(serialized_player)
- output_message = json.dumps(message_dict)
- # answer to channel with name as login
- print message_dict['info']
- client.publish(login, output_message)
- else:
- message_dict = {
- 'message_type': 'auth',
- 'status': 'error',
- 'info': 'User {0} has not created. Check your creds'.format(login),
- }
- print message_dict['info']
- output_message = json.dumps(message_dict)
- client.publish(login, output_message)
- elif message_type == 'register':
- try:
- user = User.objects.get(username=login)
- message_dict = {
- 'message_type': 'register',
- 'status': 'error',
- 'info': 'Player {0} has already been registered.'.format(user.email),
- }
- except User.DoesNotExist as e:
- User.objects.create(first_name='Guest', email=login, username=login)
- user = User.objects.get(username=login)
- user.set_password(password)
- user.save()
- message_dict = {
- 'message_type': 'register',
- 'status': 'success',
- 'info': 'New player {0} has been registered successfully'.format(login),
- }
- except Exception as e:
- message_dict = {
- 'message_type': 'register',
- 'status': 'error',
- 'info': 'Error: {0}'.format(e.message),
- }
- finally:
- print message_dict['info']
- output_message = json.dumps(message_dict)
- client.publish(login, output_message)
- elif message_type == 'data':
- player_as_dict = message['player']
- pk = int(player_as_dict['pk'])
- try:
- player = GameObject.objects.get(pk=pk)
- player.type = player_as_dict['type']
- player.name = player_as_dict['name']
- player.timestamp = datetime.datetime.now().strftime('%d %m %Y, %H:%M:%S')
- player.lat = player_as_dict['lat']
- player.lng = player_as_dict['lng']
- player.radius = 100 #message['radius']
- player.alive = True
- player.online = True
- player.save()
- game_object_list = GameObject.objects.all()
- serialized_game_object_list = GameObjectSerializer(game_object_list, many=True)
- message_dict = {
- 'message_type': 'data',
- 'status': 'success',
- 'info': "{0}'s state was saved successfully".format(player.name),
- }
- except GameObject.DoesNotExist as e:
- message_dict = {
- 'message_type': 'data',
- 'status': 'error',
- 'info': 'Error: {0}'.format(e.message),
- }
- except Exception as e:
- message_dict = {
- 'message_type': 'data',
- 'status': 'error',
- 'info': 'Error: {0}'.format(e.message),
- }
- finally:
- print message_dict['info']
- output_message = json.dumps(serialized_game_object_list.data)
- client.publish('server', output_message)
- else:
- message = {
- 'error': 'Type of message is not defined',
- }
- output_message = json.dumps(message)
- client.publish('server', output_message)
- client = mqtt.Client()
- client.on_connect = on_connect
- client.on_disconnect = on_disconnect
- client.on_message = on_message
- # client.on_publish = on_publish
- # client.will_set('client', payload=None, qos=2, retain=False)
- client.connect("192.168.1.6", 1883, 60)
- # client.connect("10.10.9.186", 1883, 60)
- # client.connect("127.0.0.1", 1883, 60)
- # client.loop_forever()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement