def _login(socket, phone, password, uuid): response = washer_pb2.Login_Response() md5 = hashlib.md5() md5.update(password.encode()) password = md5.hexdigest() filter = {"phone": phone} washer = Washer.find_one(filter) if washer is None: response.error_code = common_pb2.ERROR_WASHER_NOT_FOUND helper.client_send(socket, common_pb2.LOGIN, response) print('washer:{} not found.'.format(phone)) return elif washer['password'] != password: response.error_code = common_pb2.ERROR_PASSWORD_INVALID helper.client_send(socket, common_pb2.LOGIN, response) print('password invalid.') return print('{}, login success'.format(phone)) filter = {"washer_phone": phone, "statu": common_pb2.DISTRIBUTED} orders = Order.find(filter).count() _washer = { "id": str(washer['_id']), "phone": phone, "nick": washer['nick'], "level": washer['level'], "avatar": washer['avatar'], "type": washer['type'], "orders": orders, "open": washer['open'], "socket": socket } print("success-> v1.washer._login, phone:{} login success".format(phone)) Washer.add_online_washer(socket, _washer) response.washer.id = str(washer['_id']) response.washer.phone = washer['phone'] response.washer.nick = washer['nick'] response.washer.avatar = washer['avatar'] response.washer.level = washer['level'] response.washer.reg_time = washer['reg_time'] response.washer.status = washer['status'] response.washer.open = washer['open'] response.washer.type = washer['type'] response.washer.secret = _make_secret(phone, uuid) response.error_code = common_pb2.SUCCESS helper.client_send(socket, common_pb2.LOGIN, response) filter = {"phone": phone} update = {"$set": {"last_login": int(time.time())}} Washer.update_one(filter, update)
def logout(socket, platform, data): response = washer_pb2.Logout_Response() washer = Washer.get_online_washer(socket) if washer['open']: filter = {"phone": washer['phone']} update = {"$set": {"open": 0}} Washer.update_one(filter, update) Washer.out_workgroup(washer['city_code'], washer['phone'], washer['type']) Washer.remove_online_washer(socket) print("success-> v1.washer.logout, phone:{}".format(washer['phone'])) response.error_code = common_pb2.SUCCESS helper.client_send(socket, common_pb2.LOGOUT, response) helper.socket_close(socket)
def _make_secret(phone, uuid): now = time.time() elements = [str(now)] elements.append(common.APP_KEY) elements.append(uuid) elements.append(helper.make_rand(6)) elements.append(phone) secret = ''.join(elements) md5 = hashlib.md5() md5.update(secret.encode()) secret = md5.hexdigest() filter = {"phone": phone} update = {"$set": {"secret": secret}} Washer.update_one(filter, update) return secret
def start_work(socket, platform, data): response = washer_pb2.Start_Work_Response() washer = Washer.get_online_washer(socket) if washer is None: #未登录 print("login first please") response.error_code = common_pb2.ERROR_NOT_LOGIN helper.client_send(socket, common_pb2.START_WORK, response) return """ if washer['open'] == 1: #已经处于开工状态 response.error_code = common_pb2.ERROR_ALREAD_START helper.client_send(socket, common_pb2.START_WORK, response) return """ filter = {"phone": washer['phone']} update = {"$set": {"open": 1}} result = Washer.update_one(filter, update) """ if not result.modified_count: #mongo version 2.6开始才有此值 response.error_code = common_pb2.ERROR_START_WORK_FAILURE helper.client_send(socket, common_pb2.START_WORK, response) return """ request = washer_pb2.Start_Work_Request() request.ParseFromString(data) city_code = request.city_code longitude = request.longitude latitude = request.latitude result = Washer.in_workgroup(city_code, longitude, latitude, washer['phone'], washer['type']) if not result: #写入redis失败 print( "error-> v1.washer.start_work, phone:{} add to workgroup failure". format(washer['phone'])) response.error_code = common_pb2.ERROR_START_WORK_FAILURE helper.client_send(socket, common_pb2.START_WORK, response) return washer['open'] = 1 washer['city_code'] = city_code Washer.add_online_washer(socket, washer) response.error_code = common_pb2.SUCCESS helper.client_send(socket, common_pb2.START_WORK, response) print("{}, start work success".format(washer['phone']))
def stop_work(socket, platform, data): response = washer_pb2.Stop_Work_Response() washer = Washer.get_online_washer(socket) if washer is None: #未登录 response.error_code = common_pb2.ERROR_NOT_LOGIN helper.client_send(socket, common_pb2.STOP_WORK, response) return if 'open' in washer and washer['open'] == 0: print( "debug-> v1.washer.stop_work, nick:{} phone:{} work already stoped." .format(washer['nick'], washer['phone'])) response.error_code = common_pb2.SUCCESS helper.client_send(socket, common_pb2.STOP_WORK, response) return filter = {"phone": washer['phone']} update = {"$set": {"open": 0}} result = Washer.update_one(filter, update) if not result.modified_count: print( "debug-> v1.washer.stop_work, nick:{} phone:{}, update database failure, stop work failure" .format(washer['nick'], washer['phone'])) response.error_code = common_pb2.ERROR_STOP_WORK_FAILURE helper.client_send(socket, common_pb2.STOP_WORK, response) return result = Washer.out_workgroup(washer['city_code'], washer['phone'], washer['type']) if not result: print( "debug-> v1.washer.stop_work, nick:{} phone:{}, out workgroup failure" .format(washer['nick'], washer['phone'])) response.error_code = common_pb2.ERROR_STOP_WORK_FAILURE helper.client_send(socket, common_pb2.STOP_WORK, response) return print("debug-> v1.washer.stop_work, nick:{} phone:{} stop work success.". format(washer['nick'], washer['phone'])) washer['open'] = 0 Washer.add_online_washer(socket, washer) response.error_code = common_pb2.SUCCESS helper.client_send(socket, common_pb2.STOP_WORK, response)