Program Listing for File IOConnection.h¶
↰ Return to documentation for file (src/IOConnection.h)
//
// Created by flipback on 11/18/19.
//
#ifndef EIPSCANNER_IOCONNECTION_H
#define EIPSCANNER_IOCONNECTION_H
#include <memory>
#include <vector>
#include <functional>
#include "cip/Types.h"
#include "sockets/UDPSocket.h"
namespace eipScanner {
class ConnectionManager;
class IOConnection {
friend class ConnectionManager;
public:
using ReceiveDataHandle = std::function<void(cip::CipUdint, cip::CipUint, const std::vector<uint8_t>&)>;
using SendDataHandle = std::function<void(std::vector<uint8_t>&)>;
using CloseHandle = std::function<void()>;
using WPtr=std::weak_ptr<IOConnection>;
using SPtr=std::shared_ptr<IOConnection>;
~IOConnection();
void setDataToSend(const std::vector<uint8_t>& data);
void setReceiveDataListener(ReceiveDataHandle handle);
void setCloseListener(CloseHandle handle);
void setSendDataListener(SendDataHandle handle);
private:
IOConnection();
void notifyReceiveData(const std::vector<uint8_t> &data);
bool notifyTick();
cip::CipUdint _o2tNetworkConnectionId;
cip::CipUdint _t2oNetworkConnectionId;
cip::CipUdint _o2tAPI;
cip::CipUdint _t2oAPI;
size_t _o2tDataSize;
size_t _t2oDataSize;
bool _o2tFixedSize;
bool _t2oFixedSize;
cip::CipUdint _o2tTimer;
cip::CipUdint _t2o_timer;
cip::CipUsint _connectionTimeoutMultiplier;
cip::CipUdint _connectionTimeoutCount;
cip::CipUdint _o2tSequenceNumber;
cip::CipUdint _t2oSequenceNumber;
cip::CipUdint _serialNumber;
cip::CipUsint _transportTypeTrigger;
cip::CipBool _o2tRealTimeFormat;
cip::CipBool _t2oRealTimeFormat;
cip::CipUint _sequenceValueCount;
std::vector<uint8_t> _connectionPath;
cip::CipUint _originatorVendorId;
cip::CipUdint _originatorSerialNumber;
std::vector<uint8_t> _outputData;
sockets::UDPSocket::UPtr _socket;
ReceiveDataHandle _receiveDataHandle;
CloseHandle _closeHandle;
SendDataHandle _sendDataHandle;
std::chrono::steady_clock::time_point _lastHandleTime;
};
}
#endif // EIPSCANNER_IOCONNECTION_H