YungTatyu / webserv

1 stars 0 forks source link

WebServerクラス refactoring #64

Open ayase-mstk opened 4 months ago

ayase-mstk commented 4 months ago

機能をほかのクラスに分ける

kohshi54 commented 4 months ago
vector<struct pollfd> eventList;
waitForEvent()
{
    poll();
}

receiveEvent()
{
    eventManager->recevieEvents()
    {
        for ( auto& it : vector<struct pollfd> )
        {
            eventList.pushback( it );
        }
    }
}

processEvent( vector<EventList> events )
{
    for ( auto& event : events )
    {
        callHandler( EventManager->getHandlerToCall( event ) )
        {
            this->(func)();
        }
    }
}

    func* getHandlerToCall()
    {
        if ( isReadEvetns ) // events.revents == pollin
            return pollinHandler();
        else if ( events.revents == isWriteEvetns ) // events.revents == pollout
            return pollOutHandler();
        else if ( TIMEOUT )
            return timeoutHandler;
    }
kohshi54 commented 4 months ago

ifndef EVENT_MANAGER_HPP

define EVENT_MANAGER_HPP

include

include

class EventManager { public: // std::vector fds; eventList; void updateEvents( const int fd, const short events ); void addEvent( const struct pollfd pfd ); const std::vector& getAllPollfd() const; struct pollfd getPollfd( const int fd ) const;

    static struct pollfd genPollFd( const int fd, const short events, const short revents );
    static bool isInvalidFd( const struct pollfd& pfd );

};

endif

kohshi54 commented 4 months ago

ifndef CONNECTION_MANAGER_HPP

define CONNECTION_MANAGER_HPP

include

include

class ConnectionData { public: std::vector rawRequest; // 画像などのテキスト以外のバイナリデータを扱う可能性があるのでstd::stringではなく、vectorにした。 std::vector response;

    // poll ( vector<struct pollfd>.data(), size(), -1);
    int events;

};

/ コネクションの疎通したソケットとその直近のリクエストメッセージ情報を管理する / class ConnectionManager { public: void setConnection( const struct pollfd& pfd ); void removeConnection( const int fd ); void setRawRequest( const int fd, const std::vector& rawRequest ); const std::vector& getRawRequest( const int fd ) const; void setResponse( int fd, const std::vector& response ); const std::vector& getResponse( int fd ) const;

private:
    std::map<int, class ConnectionData> connections_;

};

endif