Commit cd7c06e3 authored by jan.koester's avatar jan.koester
Browse files

new threading api

parent 2e6af718
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -42,14 +42,14 @@ namespace netplus {
            virtual void initEventHandler()=0;
            virtual const char *getpolltype()=0;
            /*pollstate*/
            virtual int pollState(int pos)=0;
            virtual int pollState(con *pcon)=0;

            /*EventHandler*/
            virtual unsigned int waitEventHandler()=0;
            virtual void ConnectEventHandler(int pos)=0;
            virtual void ReadEventHandler(int pos)=0;
            virtual void WriteEventHandler(int pos)=0;
            virtual void CloseEventHandler(int pos)=0;
            virtual con *ConnectEventHandler(int pos)=0;
            virtual void ReadEventHandler(con *rcon)=0;
            virtual void WriteEventHandler(con *wcon)=0;
            virtual void CloseEventHandler(con *delcon)=0;

            /*HTTP API Events*/
            virtual void RequestEvent(con *curcon)=0;
@@ -73,12 +73,12 @@ namespace netplus {
            virtual ~poll();
            const char *getpolltype();
            void initEventHandler();
            int pollState(int pos);
            int pollState(con *pcon);
            unsigned int waitEventHandler();
            void ConnectEventHandler(int pos);
            void ReadEventHandler(int pos);
            void WriteEventHandler(int pos);
            void CloseEventHandler(int pos);
            con *ConnectEventHandler(int pos);
            void ReadEventHandler(con *rcon);
            void WriteEventHandler(con *wcon);
            void CloseEventHandler(con *delcon);
            void sendReady(con *curcon,bool ready);
            void unlockCon(int pos);
            bool trylockCon(int pos);
+17 −23
Original line number Diff line number Diff line
@@ -99,12 +99,9 @@ namespace netplus {
            _Events[i].data.ptr = nullptr;
    };

    int poll::pollState(int pos){
    int poll::pollState(con *pcon){
        NetException exception;
        con* ccon = (con*)_Events[pos].data.ptr;
        if(!ccon)
            throw "Scheiße !";
        if (ccon->getSendData()) {
        if (pcon->getSendData()) {
            return EventHandlerStatus::EVOUT;
        }
        return EventHandlerStatus::EVIN;
@@ -120,12 +117,12 @@ namespace netplus {
        return ret;
    };

    void poll::ConnectEventHandler(int pos) {
    con *poll::ConnectEventHandler(int pos) {
        const std::lock_guard<std::mutex> lock(_StateLock);
        NetException exception;
        con *ccon = (con*)_Events[pos].data.ptr;
        if(ccon)
            return;
            return ccon;
        try {
            ccon = new con(this);
            ccon->conlock.lock();
@@ -146,18 +143,19 @@ namespace netplus {

            ConnectEvent(ccon);
            ccon->conlock.unlock();
            return ccon;
        } catch (NetException& e) {
            ccon->conlock.unlock();
            delete ccon->csock;
            delete ccon;
        }
        return nullptr;
    };

    void poll::ReadEventHandler(int pos) {
        con* rcon = (con*)_Events[pos].data.ptr;
    void poll::ReadEventHandler(con *rcon) {
        if (!rcon) {
                NetException exp;
                exp[NetException::Error] << "ReadEvent: No valied Connection at pos: " << pos;
                exp[NetException::Error] << "ReadEvent: No valied Connection! ";
                throw exp;
        }
        try {
@@ -173,17 +171,16 @@ namespace netplus {
        }
    };

    void poll::WriteEventHandler(int pos) {
        con* wcon = (con*)_Events[pos].data.ptr;
    void poll::WriteEventHandler(con* wcon) {
        if (!wcon) {
                NetException exp;
                exp[NetException::Error] << "WriteEvent: No valied Connection at pos: " << pos;
                exp[NetException::Error] << "WriteEvent: No valied Connection!";
                throw exp;
        }
        try {
            if(!wcon->getSendData()){
                NetException exp;
                exp[NetException::Note] << "WriteEvent: no data to send!" << pos;
                exp[NetException::Note] << "WriteEvent: no data to send!";
                throw exp;
            }
            size_t sended = _ServerSocket->sendData(wcon->csock,
@@ -199,11 +196,9 @@ namespace netplus {
        }
    };

    void poll::CloseEventHandler(int pos) {
    void poll::CloseEventHandler(con *delcon) {
        NetException except;

        con* delcon = (con*)_Events[pos].data.ptr;

        if(!delcon){
            except[NetException::Error] << "CloseEvent connection not exists!";
            throw except;
@@ -225,7 +220,6 @@ namespace netplus {

        delete delcon->csock;
        delete delcon;
        _Events[pos].data.ptr=nullptr;
    };

    /*Connection Ready to send Data*/
@@ -278,15 +272,15 @@ namespace netplus {
                    int wfd = eventptr->waitEventHandler();
                    for (int i = 0; i < wfd; ++i) {
                        try {
                            eventptr->ConnectEventHandler(i);
                            con *pcon=eventptr->ConnectEventHandler(i);
                            if(eventptr->trylockCon(i)){
                                try{
                                    switch (eventptr->pollState(i)) {
                                    switch (eventptr->pollState(pcon)) {
                                        case poll::EVIN:
                                            eventptr->ReadEventHandler(i);
                                            eventptr->ReadEventHandler(pcon);
                                            break;
                                        case poll::EVOUT:
                                            eventptr->WriteEventHandler(i);
                                            eventptr->WriteEventHandler(pcon);
                                            break;
                                        default:
                                            NetException excep;
@@ -295,7 +289,7 @@ namespace netplus {
                                    }
                                    eventptr->unlockCon(i);
                                }catch(NetException& e){
                                    eventptr->CloseEventHandler(i);
                                    eventptr->CloseEventHandler(pcon);
                                    throw e;
                                }
                            }