1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*
- * @Description: 车位分配算法模块,使用单例模式,接收外部请求并通过调用通信块接口发送反馈
- * @Author: yct
- * @Date: 2020-07-10 09:25:56
- * @LastEditTime: 2020-08-06 10:18:56
- * @LastEditors: yct
- */
- #ifndef PARKSPACE_ALLOCATOR_HH
- #define PARKSPACE_ALLOCATOR_HH
- #include "../tool/thread_pool.h"
- #include "../tool/singleton.h"
- #include "../tool/thread_condition.h"
- #include "../error_code/error_code.h"
- #include "../communication/communication_message.h"
- #include "../message/parkspace_allocation_message.pb.h"
- #include "parkspace_operating_function.h"
- #include <ctime>
- #include <stdlib.h>
- //Parkspace_manager
- class Parkspace_manager : public Singleton<Parkspace_manager>
- {
- friend class Singleton<Parkspace_manager>;
- public:
- enum Parkspace_manager_satus
- {
- eParkspace_manager_unknown,
- eParkspace_manager_normal,
- eParkspace_manager_fault
- };
- //车高判断标准 默认1550mm
- #define CAR_HIGH_STANDARDS 1550
- //中跑车速度 米每秒
- #define MEDIUM_CAR_SPEED 0.8
- //电梯速度 米每秒
- #define THE_ELEVATOR_SPEED 1.3
- //终端间距
- #define TERMINAL_SPACING 2
- //中跑车楼下运动时间
- #define DOWNSTAIRS_SPORTS_TIME 0
- //中跑车楼上运动时间
- #define UPSTAIRS_SPORTS_TIME 0
- //电梯运动时间
- #define ELEVATOR_MOVEMENT_TIME 0
- private:
- // 父类的构造函数必须保护,子类的构造函数必须私有。
- Parkspace_manager();
- public:
- // 必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
- Parkspace_manager(const Parkspace_manager &) = delete;
- Parkspace_manager &operator=(const Parkspace_manager &) = delete;
- ~Parkspace_manager();
- public://API functions
- //初始化
- Error_manager parkspace_manager_init(int threads_size);
- //反初始化
- Error_manager parkspace_manager_uninit();
- // 获取模块状态
- Parkspace_manager_satus get_parkspace_manage_status();
- //检查执行者的状态, 判断能否处理这条消息,
- Error_manager check_status();
- //处理消息的执行函数
- Error_manager execute_msg(Communication_message* p_msg);
- //封装心跳消息
- Error_manager encapsulating_heartbeat_messages();
- //判断是否为待机,如果已经准备好,则可以执行任务。
- bool is_ready();
- // 检查车辆是否已存在,通常分配前调用
- bool check_car_existence(std::string license);
- public://execute_msg创建各线程进行处理
- //发送车位数据函数 在接收到请求和进行数据库操作后调用
- Error_manager send_parkspace_data();
- //找到一个最优车位
- Error_manager query_the_optimal_parkspace(message::Parkspace_info &parkspace_info,message::Car_info car_info,int terminal_id);
- //分配车位线程函数
- void execute_for_allocate(message::Car_info car_info, int terminal_id,std::string command_key);
- //查询车位线程函数
- void execute_for_search(message::Car_info car_info,std::string command_key);
- //释放车位线程函数
- void execute_for_release(message::Parkspace_info space_info, std::string command_key);
- //强制更新车位信息线程函数
- void execute_for_force_update(message::Parkspace_info space_info, std::string command_key);
- //确认分配车位线程函数
- void execute_for_confirm_alloc(message::Parkspace_info space_info, std::string command_key);
- private:
- Parkspace_manager_satus m_parkspace_manager_satus; //分配器当前状态
- Thread_pool m_thread_pool; //执行多任务的线程池
- Parkspace_operating_function m_parkspace_operating_function;//数据库操作函数
- };
- #endif // !PARKSPACE_ALLOCATOR_HH
|