File connection_manager.h
File List > GGPOUE4 > Public > include > connection_manager.h
Go to the documentation of this file
#ifndef _CONNECTION_MANAGER_H
#define _CONNECTION_MANAGER_H
#include <map>
#include <memory>
#include <string>
#include "../../Private/types.h"
class ConnectionInfo {
public:
ConnectionInfo() {}
virtual ~ConnectionInfo() {
}
virtual std::string ToString() = 0;
};
class GGPOUE4_API ConnectionManager {
public:
ConnectionManager() : _id_to_issue(0) {}
virtual ~ConnectionManager();
virtual int SendTo(const char* buffer, int len, int flags, int connection_id) = 0;
virtual int RecvFrom(char* buffer, int len, int flags, int* connection_id) = 0;
virtual int ResetManager() {
_connection_map.clear();
return 0;
}
virtual std::string ToString(int connection_id);
void Log(const char* fmt, ...);
protected:
int AddConnection(std::shared_ptr<ConnectionInfo> info) {
_connection_map.insert({_id_to_issue, info});
return _id_to_issue++;
}
int _id_to_issue;
std::map <int, std::shared_ptr<ConnectionInfo>> _connection_map;
};
#if defined(_WINDOWS)
class UPDInfo : public ConnectionInfo {
public:
UPDInfo(const char* ip_address, uint16 port);
sockaddr_in addr;
~UPDInfo() {
}
virtual std::string ToString();
};
class GGPOUE4_API UDPConnectionManager : public ConnectionManager {
public:
UDPConnectionManager();
virtual ~UDPConnectionManager();
virtual int SendTo(const char* buffer, int len, int flags, int connection_id);
virtual int RecvFrom(char* buffer, int len, int flags, int* connection_id);
int AddConnection(const char* ip_address, uint16 port);
void Init(uint16 port);
int FindIDFromIP(sockaddr_in* sockaddr);
protected:
std::shared_ptr<ConnectionInfo> BuildConnectionInfo(const char* ip_address, uint16 port);
sockaddr_in _peer_addr;
SOCKET _socket;
};
#endif
#endif