def communication(request): import pdb # pdb.set_trace() print "start=====com" if request.method != 'POST': resp = JsonResponse({'type': 'login', 'source': 'host', 'ack_nak': 'NAK'}) resp['Access-Control-Allow-Origin'] = '*' return resp source = request.POST.get('source', '') op = request.POST.get('type', 'login') room = Room.objects.select_for_update().filter(numbers=source).first() print "operator======, ", op if op == 'login': if not room: user = User.objects.create(username=get_rand_name(), password='******') room = Room.objects.create(user_id=user.id, numbers=source) ip_port = request.POST.get('ip_port', None) print "ip___port:_______ ", ip_port room.ip_address = ip_port room.host = Server.get_host() room.link = 1 room.save() print "=========================" resp = JsonResponse({'type':'login', 'source':'host', 'ack_nak': 'ACK'}) resp['Access-Control-Allow-Origin'] = '*' return resp if not room: resp = JsonResponse({'type': op, 'source': 'host', 'ack_nak': 'NAK'}) resp['Access-Control-Allow-Origin'] = '*' return resp if op == 'logout': room.link = 0 room.save() resp = JsonResponse({'type':'logout', 'source':'host', 'ack_nak': 'ACK'}) resp['Access-Control-Allow-Origin'] = '*' return resp elif op == 'require': speed = request.POST.get('speed', 'low') print "start stop" resp = post_to_client(room.ip_address, {'type':'stop', 'source': 'host'}) stop_cost(room.id, room.room_temperature) room.speed = RESPEED[speed] room.service = 0 room.save() resp = JsonResponse({'type':'require', 'source':'host', 'ack_nak': 'ACK'}) resp['Access-Control-Allow-Origin'] = '*' return resp elif op == 'query_cost': resp = JsonResponse({'type': 'query_cost', 'source': 'host', 'ack_nak': 'ACK', 'power_consumption': room.power, 'price': room.price, 'total_cost': room.total_cost}) resp['Access-Control-Allow-Origin'] = '*' return resp elif op == 'query_mode': resp = JsonResponse({'type': 'query_mode', 'source': 'host', 'ack_nak': 'ACK', 'mode': MODE[Server.get_attr('mode')]}) resp['Access-Control-Allow-Origin'] = '*' return resp
def update_room_info(): mode = Server.get_attr('mode') query = Room.objects.select_for_update().filter(host=Server.get_host(), link=1) for room in query.all(): resp = query_room_temperature(room.ip_address, room.numbers) if not room.link: continue if resp['code'] == 0: room.setting_temperature = resp['setting_temperature'] room.room_temperature = resp['room_temperature'] else: room.link = 0 room.service = 0 print "break link!" speed = room.speed room.save() if not room.service: continue if (room.setting_temperature >= room.room_temperature + 0.1 and mode == 0) or (room.setting_temperature + 0.1 <= room.room_temperature and mode == 2): room.service = 0 if room.service == 0: old_cost = RoomRequest.objects.filter(room_id=room.id).order_by("-id").first() old_cost.end_time = datetime.now() old_cost.end_temperature = room.room_temperature old_cost.save() resp = post_to_client(room.ip_address, {'type':'stop', 'source': 'host'}) if room.service == 1: update_cost(room.id, POWER_PER_MIN[room.speed], room.price) room.power += POWER_PER_MIN[room.speed] room.total_cost = room.power * room.price room.save() service_count = query.filter(service=1).count() if service_count < 3: rooms = query.filter(service=0, speed__gt=0).all() for room in rooms: speed = room.speed if (room.setting_temperature >= room.room_temperature + 0.1 and mode == 0) or (room.setting_temperature + 0.1 <= room.room_temperature and mode == 2): continue resp = post_to_client(room.ip_address, {'type':'send', 'source':'host'}) if resp['code'] == 0: room.service = 1 room_request = RoomRequest.objects.create(room_id=room.id, start_time=datetime.now(), power = 0, cost = 0, start_temperature=room.room_temperature, speed=speed) print "start service" room.start_service_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') room.save() break return JsonResponse({'code': 0})