123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- #pragma once
- #include <string>
- #include <mutex>
- #include <condition_variable>
- #include <map>
- #include <atomic>
- #include <rapidjson/writer.h>
- #include <rapidjson/stringbuffer.h>
- #include <rapidjson/prettywriter.h>
- #include <boost/function.hpp>
- #include <boost/bind.hpp>
- #include "sio_client.h"
- #include "jsonBuilder.h"
- #include "sio_message.h"
- namespace sys
- {
-
- typedef boost::function<void( int, std::string const&, sio::message::ptr const&, bool, sio::message::list & )> MSG_HANDLE_FUNC_TYPE;
- class wsClient
- {
- public:
- std::map<std::string, MSG_HANDLE_FUNC_TYPE> __MsgFuncList;
- private:
- sio::client __wsclient;
- int __ID;
- std::string __uri;
- bool __Connected;
- bool __SktOpened;
- bool __Logined;
- std::condition_variable_any __cond;
- std::mutex __lock;
- std::string __LastError;
- std::recursive_mutex __send_lock;
- jsonBuilder __jsBuilder;
- std::atomic<unsigned int> __connet_time;
- std::atomic<unsigned int> __recv_ping_time;
- protected:
-
- void _reset();
-
- void _on_connected();
-
- void _on_close( sio::client::close_reason const& reason );
-
- void _on_reconnect( unsigned p1, unsigned p2 );
-
- void _on_fail();
-
- void _on_socket_opened();
-
- void _OnCallMessage( std::string const& name, sio::message::ptr const& data, bool need_ack, sio::message::list &ack_resp );
-
- void _OnLoginResponse( std::string const& name, sio::message::ptr const& data, bool need_ack, sio::message::list &ack_resp );
- sio::message::ptr light_ctrl_to_sio_message(const std::string& val);
- public:
- wsClient();
- ~wsClient();
- std::shared_ptr<wsClient> clone();
-
- void init( int ID, const std::string & uri, const std::map<std::string, MSG_HANDLE_FUNC_TYPE>& MsgFuncList );
-
- std::string get_uri();
-
- int connect( int time_out = 3 );
-
- void login();
-
- void send( const std::string & Cmd, const std::string & Data );
-
- int GetID();
-
- bool IsConnected();
-
- bool IsSktOpened();
-
- bool IsLogined();
-
- void close();
-
- std::string GetLastError();
-
- int GetPingTime() const ;
-
- void reconnect();
- sio::message::ptr to_sio_message(const std::string& val);
- sio::message::ptr call_to_sio_message(const std::string& val);
- sio::message::ptr from_json(const rapidjson::Value& val);
- sio::message::ptr from_array(const rapidjson::Value& val);
- };
- }
|