Program Listing for File ConnectionManager.h

Return to documentation for file (src/ConnectionManager.h)

//
// Created by Aleksey Timin on 11/18/19.
//

#ifndef EIPSCANNER_CONNECTIONMANAGER_H
#define EIPSCANNER_CONNECTIONMANAGER_H

#include <map>
#include "MessageRouter.h"
#include "IOConnection.h"
#include "cip/connectionManager/ConnectionParameters.h"
#include "cip/Services.h"
#include "cip/Types.h"
#include "sockets/UDPBoundSocket.h"

namespace eipScanner {
    class ConnectionManager {
    public:
        ConnectionManager();

        explicit ConnectionManager(const MessageRouter::SPtr& messageRouter);

        ~ConnectionManager();

        IOConnection::WPtr forwardOpen(const SessionInfoIf::SPtr& si, cip::connectionManager::ConnectionParameters connectionParameters, bool isLarge = false);

        IOConnection::WPtr largeForwardOpen(const SessionInfoIf::SPtr& si, cip::connectionManager::ConnectionParameters connectionParameters);


        void forwardClose(const SessionInfoIf::SPtr& si, const IOConnection::WPtr& ioConnection);

        void handleConnections(std::chrono::milliseconds timeout);

        bool hasOpenConnections() const;
    private:
        MessageRouter::SPtr _messageRouter;
        std::map<cip::CipUint, IOConnection::SPtr> _connectionMap;
        std::map<sockets::EndPoint, std::shared_ptr<sockets::UDPBoundSocket>> _socketMap;

        sockets::UDPBoundSocket::SPtr  findOrCreateSocket(const sockets::EndPoint& endPoint);
        cip::CipUint _incarnationId;
    };
}

#endif  // EIPSCANNER_CONNECTIONMANAGER_H