52 lines
1.3 KiB
C++
52 lines
1.3 KiB
C++
#ifndef __Controller_H__
|
|
#define __Controller_H__
|
|
|
|
#include "Sys.h"
|
|
#include "Net\ITransport.h"
|
|
|
|
#include "Message.h"
|
|
|
|
// 处理消息,返回是否成功
|
|
typedef bool (*MessageHandler)(void* sender, Message& msg, void* param);
|
|
|
|
// 消息控制器。负责发送消息、接收消息、分发消息
|
|
class Controller
|
|
{
|
|
private:
|
|
static uint Dispatch(ITransport* port, Buffer& bs, void* param, void* param2);
|
|
|
|
protected:
|
|
|
|
virtual bool Dispatch(Stream& ms, Message* pmsg, void* param);
|
|
// 收到消息校验后调用该函数。返回值决定消息是否有效,无效消息不交给处理器处理
|
|
virtual bool Valid(const Message& msg);
|
|
// 接收处理
|
|
virtual bool OnReceive(Message& msg);
|
|
|
|
public:
|
|
ITransport* Port; // 数据传输口数组
|
|
byte MinSize; // 最小消息大小
|
|
bool Opened;
|
|
|
|
Controller();
|
|
virtual ~Controller();
|
|
|
|
virtual void Open();
|
|
virtual void Close();
|
|
|
|
// 发送消息,传输口参数为空时向所有传输口发送消息
|
|
virtual bool Send(Message& msg);
|
|
// 回复对方的请求消息
|
|
virtual bool Reply(Message& msg);
|
|
|
|
// 收到消息时触发
|
|
MessageHandler Received;
|
|
void* Param;
|
|
|
|
protected:
|
|
bool SendInternal(const Message& msg);
|
|
virtual bool SendInternal(const Buffer& bs, const void* state);
|
|
};
|
|
|
|
#endif
|