RISC-V/V203/usb/scope/server/wsclient.h
2024-10-26 12:22:17 +02:00

64 lines
1.7 KiB
C++

#ifndef WSCLIENT_H
#define WSCLIENT_H
#include "seasocks/Server.h"
#include "seasocks/WebSocket.h"
#include <filesystem>
#include <chrono>
#include <string>
#include "structures.h"
static constexpr int DATASIZE = 0x2000;
enum ParserState {
StateIdle = 0,
StateHeader,
StateData,
StateReply,
};
class WsClient {
seasocks::WebSocket * ws;
int & pollfd;
TrigerSettings trigerSettings;
bool running;
int fd;
const size_t reclen;
char * recbuff;
int recindex;
ParserState state;
int packet_cnt;
char * packet_buf;
SendHeader header;
public:
explicit WsClient(seasocks::WebSocket * p, int & fd) : ws (p), pollfd (fd),
trigerSettings(), running(false), fd(0), reclen(0x4000ul),
recindex(0), state(StateIdle), packet_cnt(0) {
recbuff = new char [reclen];
packet_buf = new char [DATASIZE];
}
virtual ~WsClient() {
delete [] recbuff;
delete [] packet_buf;
};
bool start ();
void stop ();
void send (const char * data);
void receive ();
protected:
void SendTrigerMode (int n);
void SendTrigerEdge (int n);
void SendTrigerChan (int n);
void SendBaseRange (int n);
void SettingChanged (int n);
void Start ();
void send_trig_mode ();
int write (const char * data, const int len);
void received_pack ();
void parse_input (const char * data, const long len);
void parse_header ();
void parse_packet ();
void parse_reply (const char * data, const int len);
};
#endif // WSCLIENT_H