File size: 1,334 Bytes
053b80b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#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 // _MESSAGE_MANAGER_H_