|
|
#ifndef _SESSION_MANAGER_H_
|
|
|
#define _SESSION_MANAGER_H_
|
|
|
|
|
|
#include <iostream>
|
|
|
#include <list>
|
|
|
#include <future>
|
|
|
#include <memory>
|
|
|
#include <functional>
|
|
|
|
|
|
#include "IRouterClient.h"
|
|
|
#include "messages/Frame.pb.h"
|
|
|
#include "messages/Session.pb.h"
|
|
|
#include "client_stubs/SessionClientRpc.h"
|
|
|
|
|
|
namespace Kinova
|
|
|
{
|
|
|
namespace Api
|
|
|
{
|
|
|
class SessionManager : public Session::SessionClient
|
|
|
{
|
|
|
public:
|
|
|
SessionManager() = delete;
|
|
|
explicit SessionManager(IRouterClient* router, std::function<void()> connectionTimeoutCallback = nullptr);
|
|
|
virtual ~SessionManager();
|
|
|
|
|
|
void CreateSession(const Session::CreateSessionInfo& info);
|
|
|
void CloseSession();
|
|
|
Session::ConnectionList GetConnections();
|
|
|
|
|
|
private:
|
|
|
void Hit(FrameTypes hitType);
|
|
|
void ThreadSessionValidation();
|
|
|
|
|
|
std::function<void()> m_connectionTimeoutCallback;
|
|
|
|
|
|
std::thread m_thread;
|
|
|
std::atomic<bool> m_hasBeenSent { false };
|
|
|
std::atomic<bool> m_hasBeenReceived { false };
|
|
|
std::atomic<bool> m_threadRunning { false };
|
|
|
Session::CreateSessionInfo m_sessionInfo;
|
|
|
|
|
|
void checkTransport();
|
|
|
};
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|