除非很明确很简单,否则建议采用默认构造函数,其它参数通过属性设置或者其它方法传入

This commit is contained in:
nnhy 2015-06-24 07:36:24 +00:00
parent a99f2b0d68
commit d04494e7cb
6 changed files with 40 additions and 117 deletions

View File

@ -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);

View File

@ -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:
// 注册消息处理器。考虑到业务情况,不需要取消注册 // 注册消息处理器。考虑到业务情况,不需要取消注册

View File

@ -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);

View File

@ -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;
// 发送消息,传输口参数为空时向所有传输口发送消息 // 发送消息,传输口参数为空时向所有传输口发送消息

View File

@ -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

View File

@ -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;