//
// Created by huli on 2020/6/28.
//

#include "system_communication.h"
#include "../system/system_executor.h"

System_communication::System_communication()
{

}

System_communication::~System_communication()
{

}


//检查消息是否有效, 主要检查消息类型和接受者, 判断这条消息是不是给我的.
Error_manager System_communication::check_msg(Communication_message*  p_msg)
{
	return System_executor::get_instance_references().check_msg(p_msg);
}

//检查执行者的状态, 判断能否处理这条消息, 需要子类重载
Error_manager System_communication::check_executer(Communication_message*  p_msg)
{
	//检查对应模块的状态, 判断是否可以处理这条消息
	//同时也要判断是否超时, 超时返回 COMMUNICATION_ANALYSIS_TIME_OUT
	//如果处理器正在忙别的, 那么返回 COMMUNICATION_EXCUTER_IS_BUSY
//	std::cout << "Communication_socket_base::check_msg  p_buf =  " << p_msg->get_message_buf() << std::endl;
//	std::cout << "Communication_socket_base::check_msg   size =  " << p_msg->get_message_buf().size() << std::endl;

	Error_manager t_error;
	if ( p_msg->is_over_time() )
	{
		std::cout << "COMMUNICATION_ANALYSIS_TIME_OUT , " << std::endl;
		//超时:接收方不做处理,发送方会进行超时处理
		return Error_code::COMMUNICATION_ANALYSIS_TIME_OUT;
	}
	else
	{

		return System_executor::get_instance_references().check_executer(p_msg);
	}
	return Error_code::SUCCESS;
}

//处理消息, 需要子类重载
Error_manager System_communication::execute_msg(Communication_message* p_msg)
{
	return System_executor::get_instance_references().execute_msg(p_msg);
}

//定时封装发送消息, 一般为心跳和状态信息, 需要子类重载
Error_manager System_communication::encapsulate_send_data()
{
	return System_executor::get_instance_references().encapsulate_send_status();
}









