除非很明确很简单,否则建议采用默认构造函数,其它参数通过属性设置或者其它方法传入
This commit is contained in:
parent
a99f2b0d68
commit
d04494e7cb
|
@ -9,57 +9,10 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 构造控制器
|
// 构造控制器
|
||||||
Controller::Controller(ITransport* port)
|
Controller::Controller()
|
||||||
{
|
|
||||||
assert_ptr(port);
|
|
||||||
|
|
||||||
debug_printf("\r\nTinyNet::Init 传输口:%s\r\n", port->ToString());
|
|
||||||
|
|
||||||
// 注册收到数据事件
|
|
||||||
port->Register(Dispatch, this);
|
|
||||||
|
|
||||||
_ports.Add(port);
|
|
||||||
|
|
||||||
Init();
|
|
||||||
|
|
||||||
//_ports[_portCount++] = port;
|
|
||||||
}
|
|
||||||
|
|
||||||
Controller::Controller(ITransport* ports[], int count)
|
|
||||||
{
|
|
||||||
assert_ptr(ports);
|
|
||||||
assert_param(count > 0 && count < ArrayLength(_ports));
|
|
||||||
|
|
||||||
debug_printf("\r\nTinyNet::Init 共[%d]个传输口", count);
|
|
||||||
for(int i=0; i<count && i<4; i++)
|
|
||||||
{
|
|
||||||
assert_ptr(ports[i]);
|
|
||||||
|
|
||||||
debug_printf(" %s", ports[i]->ToString());
|
|
||||||
//_ports[_portCount++] = ports[i];
|
|
||||||
_ports.Add(ports[i]);
|
|
||||||
}
|
|
||||||
debug_printf("\r\n");
|
|
||||||
|
|
||||||
// 注册收到数据事件
|
|
||||||
for(int i=0; i<count; i++)
|
|
||||||
{
|
|
||||||
ports[i]->Register(Dispatch, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Controller::Init()
|
|
||||||
{
|
{
|
||||||
MinSize = 0;
|
MinSize = 0;
|
||||||
|
|
||||||
//ArrayZero(_ports);
|
|
||||||
//_portCount = 0;
|
|
||||||
|
|
||||||
//ArrayZero(_Handlers);
|
|
||||||
//_HandlerCount = 0;
|
|
||||||
|
|
||||||
Received = NULL;
|
Received = NULL;
|
||||||
Param = NULL;
|
Param = NULL;
|
||||||
}
|
}
|
||||||
|
@ -67,18 +20,7 @@ void Controller::Init()
|
||||||
Controller::~Controller()
|
Controller::~Controller()
|
||||||
{
|
{
|
||||||
_Handlers.DeleteAll().Clear();
|
_Handlers.DeleteAll().Clear();
|
||||||
/*for(int i=0; i<_HandlerCount; i++)
|
|
||||||
{
|
|
||||||
if(_Handlers[i]) delete _Handlers[i];
|
|
||||||
}*/
|
|
||||||
|
|
||||||
_ports.DeleteAll().Clear();
|
_ports.DeleteAll().Clear();
|
||||||
/*for(int i=0; i<_ports.Count(); i++)
|
|
||||||
{
|
|
||||||
delete _ports[i];
|
|
||||||
//_ports[i] = NULL;
|
|
||||||
}
|
|
||||||
_ports.Clear();*/
|
|
||||||
|
|
||||||
debug_printf("TinyNet::UnInit\r\n");
|
debug_printf("TinyNet::UnInit\r\n");
|
||||||
}
|
}
|
||||||
|
@ -91,12 +33,18 @@ void Controller::AddTransport(ITransport* port)
|
||||||
|
|
||||||
debug_printf("\r\nTinyNet::AddTransport 添加传输口:%s\r\n", port->ToString());
|
debug_printf("\r\nTinyNet::AddTransport 添加传输口:%s\r\n", port->ToString());
|
||||||
|
|
||||||
// 注册收到数据事件
|
|
||||||
port->Register(Dispatch, this);
|
|
||||||
|
|
||||||
_ports.Add(port);
|
_ports.Add(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Controller::Open()
|
||||||
|
{
|
||||||
|
assert_param(_ports.Count() > 0);
|
||||||
|
|
||||||
|
// 注册收到数据事件
|
||||||
|
for(int i=0; i<_ports.Count(); i++)
|
||||||
|
_ports[i]->Register(Dispatch, this);
|
||||||
|
}
|
||||||
|
|
||||||
uint Controller::Dispatch(ITransport* transport, byte* buf, uint len, void* param)
|
uint Controller::Dispatch(ITransport* transport, byte* buf, uint len, void* param)
|
||||||
{
|
{
|
||||||
assert_ptr(buf);
|
assert_ptr(buf);
|
||||||
|
|
|
@ -16,12 +16,10 @@ typedef bool (*MessageHandler)(Message& msg, void* param);
|
||||||
class Controller
|
class Controller
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
void Init();
|
|
||||||
static uint Dispatch(ITransport* transport, byte* buf, uint len, void* param);
|
static uint Dispatch(ITransport* transport, byte* buf, uint len, void* param);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
List<ITransport*> _ports; // 数据传输口数组
|
List<ITransport*> _ports; // 数据传输口数组
|
||||||
//byte _portCount; // 数据传输口个数
|
|
||||||
byte MinSize; // 最小消息大小
|
byte MinSize; // 最小消息大小
|
||||||
|
|
||||||
virtual bool Dispatch(Stream& ms, Message* pmsg, ITransport* port);
|
virtual bool Dispatch(Stream& ms, Message* pmsg, ITransport* port);
|
||||||
|
@ -31,15 +29,15 @@ protected:
|
||||||
virtual bool OnReceive(Message& msg, ITransport* port);
|
virtual bool OnReceive(Message& msg, ITransport* port);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Controller(ITransport* port);
|
Controller();
|
||||||
Controller(ITransport* ports[], int count);
|
|
||||||
virtual ~Controller();
|
virtual ~Controller();
|
||||||
|
|
||||||
// 添加传输口
|
// 添加传输口
|
||||||
void AddTransport(ITransport* port);
|
void AddTransport(ITransport* port);
|
||||||
|
virtual void Open();
|
||||||
|
|
||||||
// 创建消息
|
// 创建消息
|
||||||
virtual Message* Create() const = 0;
|
virtual Message* Create() const = 0;
|
||||||
// 发送消息,传输口参数为空时向所有传输口发送消息
|
// 发送消息,传输口参数为空时向所有传输口发送消息
|
||||||
virtual int Send(Message& msg, ITransport* port = NULL);
|
virtual int Send(Message& msg, ITransport* port = NULL);
|
||||||
// 回复对方的请求消息
|
// 回复对方的请求消息
|
||||||
|
@ -57,7 +55,6 @@ private:
|
||||||
void* Param; // 参数
|
void* Param; // 参数
|
||||||
};
|
};
|
||||||
List<HandlerLookup*> _Handlers;
|
List<HandlerLookup*> _Handlers;
|
||||||
//byte _HandlerCount;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// 注册消息处理器。考虑到业务情况,不需要取消注册
|
// 注册消息处理器。考虑到业务情况,不需要取消注册
|
||||||
|
|
|
@ -162,17 +162,7 @@ void TinyMessage::Show() const
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构造控制器
|
// 构造控制器
|
||||||
TinyController::TinyController(ITransport* port) : Controller(port)
|
TinyController::TinyController() : Controller()
|
||||||
{
|
|
||||||
Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
TinyController::TinyController(ITransport* ports[], int count) : Controller(ports, count)
|
|
||||||
{
|
|
||||||
Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TinyController::Init()
|
|
||||||
{
|
{
|
||||||
_Sequence = 0;
|
_Sequence = 0;
|
||||||
_taskID = 0;
|
_taskID = 0;
|
||||||
|
@ -191,9 +181,19 @@ void TinyController::Init()
|
||||||
Time.Sleep(3);
|
Time.Sleep(3);
|
||||||
Address = Time.Current();
|
Address = Time.Current();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TinyController::~TinyController()
|
||||||
|
{
|
||||||
|
if(_taskID) Sys.RemoveTask(_taskID);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TinyController::Open()
|
||||||
|
{
|
||||||
debug_printf("TinyNet::Inited Address=%d (0x%02x) 使用[%d]个传输接口\r\n", Address, Address, _ports.Count());
|
debug_printf("TinyNet::Inited Address=%d (0x%02x) 使用[%d]个传输接口\r\n", Address, Address, _ports.Count());
|
||||||
|
|
||||||
|
Controller::Open();
|
||||||
|
|
||||||
if(!_taskID)
|
if(!_taskID)
|
||||||
{
|
{
|
||||||
debug_printf("TinyNet::微网消息队列 ");
|
debug_printf("TinyNet::微网消息队列 ");
|
||||||
|
@ -202,8 +202,6 @@ void TinyController::Init()
|
||||||
Sys.SetTask(_taskID, false);
|
Sys.SetTask(_taskID, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Total.Send = Total.Ack = Total.Bytes = Total.Cost = TotalRetry = Total.Msg = 0;
|
|
||||||
//Last.Send = Last.Ack = Last.Bytes = Last.Cost = LastRetry = Last.Msg = 0;
|
|
||||||
memset(&Total, 0, sizeof(Total));
|
memset(&Total, 0, sizeof(Total));
|
||||||
memset(&Last, 0, sizeof(Last));
|
memset(&Last, 0, sizeof(Last));
|
||||||
|
|
||||||
|
@ -212,11 +210,6 @@ void TinyController::Init()
|
||||||
Sys.AddTask(StatTask, this, 1000000, 5000000);
|
Sys.AddTask(StatTask, this, 1000000, 5000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
TinyController::~TinyController()
|
|
||||||
{
|
|
||||||
if(_taskID) Sys.RemoveTask(_taskID);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建消息
|
// 创建消息
|
||||||
Message* TinyController::Create() const
|
Message* TinyController::Create() const
|
||||||
{
|
{
|
||||||
|
@ -227,7 +220,6 @@ void ShowMessage(TinyMessage& msg, bool send, ITransport* port = NULL)
|
||||||
{
|
{
|
||||||
if(msg.Ack) return;
|
if(msg.Ack) return;
|
||||||
|
|
||||||
//msg_printf("%d ", (uint)Time.Current());
|
|
||||||
if(send)
|
if(send)
|
||||||
msg_printf("TinyMessage::Send ");
|
msg_printf("TinyMessage::Send ");
|
||||||
else
|
else
|
||||||
|
@ -552,13 +544,6 @@ int TinyController::Reply(Message& msg, ITransport* port)
|
||||||
return Send(msg, port);
|
return Send(msg, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*bool TinyController::Error(TinyMessage& msg, ITransport* port)
|
|
||||||
{
|
|
||||||
msg.Error = 1;
|
|
||||||
|
|
||||||
return Send(msg, 0, port);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
void StatTask(void* param)
|
void StatTask(void* param)
|
||||||
{
|
{
|
||||||
assert_ptr(param);
|
assert_ptr(param);
|
||||||
|
|
|
@ -115,8 +115,6 @@ private:
|
||||||
RingQueue _Ring; // 环形队列
|
RingQueue _Ring; // 环形队列
|
||||||
uint _taskID; // 发送队列任务
|
uint _taskID; // 发送队列任务
|
||||||
|
|
||||||
void Init();
|
|
||||||
|
|
||||||
void AckRequest(TinyMessage& msg, ITransport* port); // 处理收到的Ack包
|
void AckRequest(TinyMessage& msg, ITransport* port); // 处理收到的Ack包
|
||||||
void AckResponse(TinyMessage& msg, ITransport* port); // 向对方发出Ack包
|
void AckResponse(TinyMessage& msg, ITransport* port); // 向对方发出Ack包
|
||||||
|
|
||||||
|
@ -130,10 +128,11 @@ public:
|
||||||
uint Interval; // 消息队列发送间隔,微秒
|
uint Interval; // 消息队列发送间隔,微秒
|
||||||
uint Timeout; // 消息队列发送消息的默认超时时间,50毫秒
|
uint Timeout; // 消息队列发送消息的默认超时时间,50毫秒
|
||||||
|
|
||||||
TinyController(ITransport* port);
|
TinyController();
|
||||||
TinyController(ITransport* ports[], int count);
|
|
||||||
virtual ~TinyController();
|
virtual ~TinyController();
|
||||||
|
|
||||||
|
virtual void Open();
|
||||||
|
|
||||||
// 创建消息
|
// 创建消息
|
||||||
virtual Message* Create() const;
|
virtual Message* Create() const;
|
||||||
// 发送消息,传输口参数为空时向所有传输口发送消息
|
// 发送消息,传输口参数为空时向所有传输口发送消息
|
||||||
|
|
|
@ -88,27 +88,22 @@ void TokenMessage::Show() const
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TokenController::TokenController(ITransport* port) : Controller(port)
|
TokenController::TokenController() : Controller()
|
||||||
{
|
|
||||||
Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
TokenController::TokenController(ITransport* ports[], int count) : Controller(ports, count)
|
|
||||||
{
|
|
||||||
Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TokenController::Init()
|
|
||||||
{
|
{
|
||||||
Token = 0;
|
Token = 0;
|
||||||
|
|
||||||
debug_printf("TokenNet::Inited 使用[%d]个传输接口 %s\r\n", _ports.Count(), _ports[0]->ToString());
|
|
||||||
|
|
||||||
MinSize = TokenMessage::MinSize;
|
MinSize = TokenMessage::MinSize;
|
||||||
|
|
||||||
_Response = NULL;
|
_Response = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TokenController::Open()
|
||||||
|
{
|
||||||
|
debug_printf("TokenNet::Inited 使用[%d]个传输接口 %s\r\n", _ports.Count(), _ports[0]->ToString());
|
||||||
|
|
||||||
|
Controller::Open();
|
||||||
|
}
|
||||||
|
|
||||||
// 创建消息
|
// 创建消息
|
||||||
Message* TokenController::Create() const
|
Message* TokenController::Create() const
|
||||||
{
|
{
|
||||||
|
@ -179,7 +174,7 @@ bool TokenController::SendAndReceive(TokenMessage& msg, int retry, int msTimeout
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if(_Response) debug_printf("设计错误!正在等待Code=0x%02X的消息,完成之前不能再次调用\r\n", _Response->Code);
|
if(_Response) debug_printf("设计错误!正在等待Code=0x%02X的消息,完成之前不能再次调用\r\n", _Response->Code);
|
||||||
|
|
||||||
CodeTime ct;
|
CodeTime ct;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -205,7 +200,7 @@ bool TokenController::SendAndReceive(TokenMessage& msg, int retry, int msTimeout
|
||||||
}while(!tw.Expired());
|
}while(!tw.Expired());
|
||||||
if(rs) break;
|
if(rs) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
debug_printf("Token::SendAndReceive Len=%d Time=%dus\r\n", msg.Size(), ct.Elapsed());
|
debug_printf("Token::SendAndReceive Len=%d Time=%dus\r\n", msg.Size(), ct.Elapsed());
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -48,7 +48,6 @@ public:
|
||||||
class TokenController : public Controller
|
class TokenController : public Controller
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
void Init();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool Dispatch(Stream& ms, Message* pmsg, ITransport* port);
|
virtual bool Dispatch(Stream& ms, Message* pmsg, ITransport* port);
|
||||||
|
@ -60,9 +59,9 @@ protected:
|
||||||
public:
|
public:
|
||||||
uint Token; // 令牌
|
uint Token; // 令牌
|
||||||
|
|
||||||
TokenController(ITransport* port);
|
TokenController();
|
||||||
TokenController(ITransport* ports[], int count);
|
|
||||||
//virtual ~TokenController();
|
virtual void Open();
|
||||||
|
|
||||||
// 创建消息
|
// 创建消息
|
||||||
virtual Message* Create() const;
|
virtual Message* Create() const;
|
||||||
|
|
Loading…
Reference in New Issue