⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 state.c

📁 Design Pattern C Source Code
💻 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 + -