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

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
// 构造控制器
Controller::Controller(ITransport* port)
{
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()
Controller::Controller()
{
MinSize = 0;
//ArrayZero(_ports);
//_portCount = 0;
//ArrayZero(_Handlers);
//_HandlerCount = 0;
Received = NULL;
Param = NULL;
}
@ -67,18 +20,7 @@ void Controller::Init()
Controller::~Controller()
{
_Handlers.DeleteAll().Clear();
/*for(int i=0; i<_HandlerCount; i++)
{
if(_Handlers[i]) delete _Handlers[i];
}*/
_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");
}
@ -91,12 +33,18 @@ void Controller::AddTransport(ITransport* port)
debug_printf("\r\nTinyNet::AddTransport 添加传输口:%s\r\n", port->ToString());
// 注册收到数据事件
port->Register(Dispatch, this);
_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)
{
assert_ptr(buf);

View File

@ -16,12 +16,10 @@ typedef bool (*MessageHandler)(Message& msg, void* param);
class Controller
{
private:
void Init();
static uint Dispatch(ITransport* transport, byte* buf, uint len, void* param);
protected:
List<ITransport*> _ports; // 数据传输口数组
//byte _portCount; // 数据传输口个数
byte MinSize; // 最小消息大小
virtual bool Dispatch(Stream& ms, Message* pmsg, ITransport* port);
@ -31,15 +29,15 @@ protected:
virtual bool OnReceive(Message& msg, ITransport* port);
public:
Controller(ITransport* port);
Controller(ITransport* ports[], int count);
Controller();
virtual ~Controller();
// 添加传输口
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);
// 回复对方的请求消息
@ -57,7 +55,6 @@ private:
void* Param; // 参数
};
List<HandlerLookup*> _Handlers;
//byte _HandlerCount;
public:
// 注册消息处理器。考虑到业务情况,不需要取消注册

View File

@ -162,17 +162,7 @@ void TinyMessage::Show() const
}
// 构造控制器
TinyController::TinyController(ITransport* port) : Controller(port)
{
Init();
}
TinyController::TinyController(ITransport* ports[], int count) : Controller(ports, count)
{
Init();
}
void TinyController::Init()
TinyController::TinyController() : Controller()
{
_Sequence = 0;
_taskID = 0;
@ -191,9 +181,19 @@ void TinyController::Init()
Time.Sleep(3);
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());
Controller::Open();
if(!_taskID)
{
debug_printf("TinyNet::微网消息队列 ");
@ -202,8 +202,6 @@ void TinyController::Init()
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(&Last, 0, sizeof(Last));
@ -212,11 +210,6 @@ void TinyController::Init()
Sys.AddTask(StatTask, this, 1000000, 5000000);
}
TinyController::~TinyController()
{
if(_taskID) Sys.RemoveTask(_taskID);
}
// 创建消息
Message* TinyController::Create() const
{
@ -227,7 +220,6 @@ void ShowMessage(TinyMessage& msg, bool send, ITransport* port = NULL)
{
if(msg.Ack) return;
//msg_printf("%d ", (uint)Time.Current());
if(send)
msg_printf("TinyMessage::Send ");
else
@ -552,13 +544,6 @@ int TinyController::Reply(Message& msg, ITransport* port)
return Send(msg, port);
}
/*bool TinyController::Error(TinyMessage& msg, ITransport* port)
{
msg.Error = 1;
return Send(msg, 0, port);
}*/
void StatTask(void* param)
{
assert_ptr(param);

View File

@ -115,8 +115,6 @@ private:
RingQueue _Ring; // 环形队列
uint _taskID; // 发送队列任务
void Init();
void AckRequest(TinyMessage& msg, ITransport* port); // 处理收到的Ack包
void AckResponse(TinyMessage& msg, ITransport* port); // 向对方发出Ack包
@ -130,10 +128,11 @@ public:
uint Interval; // 消息队列发送间隔,微秒
uint Timeout; // 消息队列发送消息的默认超时时间50毫秒
TinyController(ITransport* port);
TinyController(ITransport* ports[], int count);
TinyController();
virtual ~TinyController();
virtual void Open();
// 创建消息
virtual Message* Create() const;
// 发送消息,传输口参数为空时向所有传输口发送消息

View File

@ -88,27 +88,22 @@ void TokenMessage::Show() const
#endif
}
TokenController::TokenController(ITransport* port) : Controller(port)
{
Init();
}
TokenController::TokenController(ITransport* ports[], int count) : Controller(ports, count)
{
Init();
}
void TokenController::Init()
TokenController::TokenController() : Controller()
{
Token = 0;
debug_printf("TokenNet::Inited 使用[%d]个传输接口 %s\r\n", _ports.Count(), _ports[0]->ToString());
MinSize = TokenMessage::MinSize;
_Response = NULL;
}
void TokenController::Open()
{
debug_printf("TokenNet::Inited 使用[%d]个传输接口 %s\r\n", _ports.Count(), _ports[0]->ToString());
Controller::Open();
}
// 创建消息
Message* TokenController::Create() const
{
@ -179,7 +174,7 @@ bool TokenController::SendAndReceive(TokenMessage& msg, int retry, int msTimeout
{
#if DEBUG
if(_Response) debug_printf("设计错误正在等待Code=0x%02X的消息完成之前不能再次调用\r\n", _Response->Code);
CodeTime ct;
#endif
@ -205,7 +200,7 @@ bool TokenController::SendAndReceive(TokenMessage& msg, int retry, int msTimeout
}while(!tw.Expired());
if(rs) break;
}
#if DEBUG
debug_printf("Token::SendAndReceive Len=%d Time=%dus\r\n", msg.Size(), ct.Elapsed());
#endif

View File

@ -48,7 +48,6 @@ public:
class TokenController : public Controller
{
private:
void Init();
protected:
virtual bool Dispatch(Stream& ms, Message* pmsg, ITransport* port);
@ -60,9 +59,9 @@ protected:
public:
uint Token; // 令牌
TokenController(ITransport* port);
TokenController(ITransport* ports[], int count);
//virtual ~TokenController();
TokenController();
virtual void Open();
// 创建消息
virtual Message* Create() const;