?? state.c
字號:
/**//**/class TCPOctetStream;class TCPState;class TCPConnection {public: TCPConnection();/**/ void ActiveOpen(); void PassiveOpen(); void Close();/**/ void Send(); void Acknowledge(); void Synchronize();/**/ void ProcessOctet(TCPOctetStream*);private: friend class TCPState; void ChangeState(TCPState*);private: TCPState* _state;};/**/class TCPState {public: virtual void Transmit(TCPConnection*, TCPOctetStream*); virtual void ActiveOpen(TCPConnection*); virtual void PassiveOpen(TCPConnection*); virtual void Close(TCPConnection*); virtual void Synchronize(TCPConnection*); virtual void Acknowledge(TCPConnection*); virtual void Send(TCPConnection*);protected: void ChangeState(TCPConnection*, TCPState*);};/**/#include "TCPClosed.C"/**/TCPConnection::TCPConnection () { _state = TCPClosed::Instance();}/**/void TCPConnection::ChangeState (TCPState* s) { _state = s;}/**/void TCPConnection::ActiveOpen () { _state->ActiveOpen(this);}/**/void TCPConnection::PassiveOpen () { _state->PassiveOpen(this);}/**/void TCPConnection::Close () { _state->Close(this);}/**/void TCPConnection::Acknowledge () { _state->Acknowledge(this);}/**/void TCPConnection::Synchronize () { _state->Synchronize(this);}/**/void TCPState::Transmit (TCPConnection*, TCPOctetStream*) { }void TCPState::ActiveOpen (TCPConnection*) { }void TCPState::PassiveOpen (TCPConnection*) { }void TCPState::Close (TCPConnection*) { }void TCPState::Synchronize (TCPConnection*) { }/**/void TCPState::ChangeState (TCPConnection* t, TCPState* s) { t->ChangeState(s);}/**/class TCPEstablished : public TCPState {public: static TCPState* Instance(); virtual void Transmit(TCPConnection*, TCPOctetStream*); virtual void Close(TCPConnection*);};/**/class TCPListen : public TCPState {public: static TCPState* Instance(); virtual void Send(TCPConnection*); // ...};/**/void TCPClosed::ActiveOpen (TCPConnection* t) { // send SYN, receive SYN, ACK, etc. ChangeState(t, TCPEstablished::Instance());}/**/void TCPClosed::PassiveOpen (TCPConnection* t) { ChangeState(t, TCPListen::Instance());}/**/void TCPEstablished::Close (TCPConnection* t) { // send FIN, receive ACK of FIN ChangeState(t, TCPListen::Instance());}/**/void TCPEstablished::Transmit ( TCPConnection* t, TCPOctetStream* o) { t->ProcessOctet(o);}/**/void TCPListen::Send (TCPConnection* t) { // send SYN, receive SYN, ACK, etc. ChangeState(t, TCPEstablished::Instance());}/**/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -