#pragma once #include "base/HGDef.h" #include "base/HGInc.h" #include "base/HGLock.h" #include "base/HGEvent.h" #include "base/HGThread.h" #include "base/HGImage.h" #include "base/HGMsgPump.h" #include "Msg.h" #include "cJSON.h" #include "sane/sane_ex.h" #include "sane/sane_option_definitions.h" #include class WebServer; class WebUser { public: #if defined(HG_CMP_MSC) WebUser(WebServer* server, HGUInt id, HGMsgPump msgPump, const std::string& ip, uint16_t port, SOCKET sockConn); #else WebUser(WebServer* server, HGUInt id, HGMsgPump msgPump, const std::string& ip, uint16_t port, int sockConn); #endif ~WebUser(); HGUInt GetId(); void CloseDev(const CloseDevParam* param); void ScanFinish(const ScanFinishParam* param); void HandleCmd(const WSCmdParam* param); void HandleEvent(const WSEvtParam* param); private: void GetDeviceList(cJSON *json); void SelectDevice(cJSON* json); void SetScanColorType(cJSON* json); void SetDPI(cJSON* json); void SetDuplex(cJSON* json); void SetScanJPGQuality(cJSON* json); void StartScan(cJSON* json); private: void PostDisConnectMsg(); void PostCmdMsg(const HGByte* data, HGUInt dataSize); void PostEventMsg(const HGByte* data, HGUInt dataSize); static void HGAPI ThreadFunc(HGThread thread, HGPointer param); static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param); std::string GetBase64(HGImage image); HGBool SetParam(const char* optionName, const HGVoid* data); HGInt GetDpi(); bool ShakeHand(const std::string& head); void Pong(); bool SendResponse(const HGByte* data, HGUInt size, HGBool text); private: HGLock m_lock; HGLock m_lockName; WebServer* m_server; HGUInt m_id; HGMsgPump m_msgPump; std::string m_ip; uint16_t m_port; #if defined(HG_CMP_MSC) SOCKET m_sockConn; #else int m_sockConn; #endif HGThread m_thread; int m_jpgQuality; std::vector m_devNameList; std::string m_devName; SANE_Handle m_devHandle; int m_dpi; HGEvent m_scanEvent; };