code_app/sdk/webscan/WebUser.h

79 lines
2.0 KiB
C++

#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 <string>
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 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<std::string> m_devNameList;
std::string m_devName;
SANE_Handle m_devHandle;
int m_dpi;
HGEvent m_scanEvent;
};