00001
00002 #ifndef FTCSERVER_V1_04_01_H_
00003 #define FTCSERVER_V1_04_01_H_
00004
00005 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
00006 # pragma once
00007 #endif
00008
00009 #include "ftc/BaseServer.h"
00010 #include "ftc/AccessKey.h"
00011 #include "ftc/DataChannelProvider.h"
00012 #include "ftc/DataChannelInfo.h"
00013 #include "ftc/DefaultServerExceptionHandler.h"
00014 #include "ftc/FTCServerConfig.h"
00015
00016 #include <map>
00017 #include <string>
00018
00019 #include <boost/asio/system_timer.hpp>
00020 #include <boost/thread.hpp>
00021
00022 namespace tecgraf { namespace ftc { namespace v1_04_01 {
00023
00024 class Connection;
00025
00031 class FTCServer : public BaseServer
00032 {
00033 public:
00039 FTCServer(DataChannelProvider& provider, const FTCServerConfig& config);
00040
00044 virtual ~FTCServer ();
00045
00047 const FTCServerConfig& config() const;
00048
00060 DataChannelInfo_ptr register_data_channel_info(void * requester, const std::string& data_id, const AccessKey * const access_key = 0, bool use_transfer_to = true, uint32_t wait_ready_timeout_ms = 60000);
00061
00070 DataChannelInfo_ptr consume_data_channel_info(AccessKey * access_key);
00071
00077 DataChannelProvider& provider() const;
00078
00079 protected:
00081 virtual BaseSession * create_session(Connection& conn);
00082
00087 virtual void check_timeout(const uint64_t& timeout_ms);
00088 private:
00089 FTCServerConfig m_config;
00090 DataChannelProvider& m_provider;
00091
00092 boost::mutex m_mutex;
00093 typedef std::map<const AccessKey*, DataChannelInfo_ptr, key_less_comp> AccessKey2DataChannelInfoMap;
00094 AccessKey2DataChannelInfoMap m_channelMap;
00095
00096 DefaultServerExceptionHandler m_exception_handler;
00097 };
00098 }}}
00099
00100 #endif
00101