diff --git a/TinyNet/Controller.cpp b/TinyNet/Controller.cpp index e4f4f638..434654ed 100644 --- a/TinyNet/Controller.cpp +++ b/TinyNet/Controller.cpp @@ -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; iToString()); - //_ports[_portCount++] = ports[i]; - _ports.Add(ports[i]); - } - debug_printf("\r\n"); - - // 注册收到数据事件 - for(int i=0; iRegister(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); diff --git a/TinyNet/Controller.h b/TinyNet/Controller.h index bcc9276e..ab22e3e1 100644 --- a/TinyNet/Controller.h +++ b/TinyNet/Controller.h @@ -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 _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 _Handlers; - //byte _HandlerCount; public: // 注册消息处理器。考虑到业务情况,不需要取消注册 diff --git a/TinyNet/TinyMessage.cpp b/TinyNet/TinyMessage.cpp index e250a090..6eadbb88 100644 --- a/TinyNet/TinyMessage.cpp +++ b/TinyNet/TinyMessage.cpp @@ -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); diff --git a/TinyNet/TinyMessage.h b/TinyNet/TinyMessage.h index 13dc8dcd..5ccb3b78 100644 --- a/TinyNet/TinyMessage.h +++ b/TinyNet/TinyMessage.h @@ -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; // 发送消息,传输口参数为空时向所有传输口发送消息 diff --git a/TinyNet/TokenMessage.cpp b/TinyNet/TokenMessage.cpp index 7d72fcfb..34331ffe 100644 --- a/TinyNet/TokenMessage.cpp +++ b/TinyNet/TokenMessage.cpp @@ -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 diff --git a/TinyNet/TokenMessage.h b/TinyNet/TokenMessage.h index 75f11d7e..85588052 100644 --- a/TinyNet/TokenMessage.h +++ b/TinyNet/TokenMessage.h @@ -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;