mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
搭建PVB架构,实现前端的基础布局、菜单、表格、图示等功能
This commit is contained in:
270
libs/pvb/include/rllib/rlsocket.h
Normal file
270
libs/pvb/include/rllib/rlsocket.h
Normal file
@@ -0,0 +1,270 @@
|
||||
/***************************************************************************
|
||||
rlsocket.h - description
|
||||
-------------------
|
||||
begin : Tue Jan 02 2001
|
||||
copyright : (C) 2001 by R. Lehrig
|
||||
email : lehrig@t-online.de
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as *
|
||||
* published by the Free Software Foundation *
|
||||
* *
|
||||
***************************************************************************/
|
||||
#ifndef _RL_SOCKET_H_
|
||||
#define _RL_SOCKET_H_
|
||||
|
||||
#include "rldefine.h"
|
||||
#include "rlstring.h"
|
||||
#ifdef RLWIN32
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <io.h>
|
||||
#include <direct.h>
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include "unistd.h"
|
||||
#endif
|
||||
|
||||
/*! <pre>
|
||||
you have to call this function before you use any sockets
|
||||
(at least under windows)
|
||||
</pre> */
|
||||
#define wsa rlwsa
|
||||
int rlwsa();
|
||||
int rlScoketWrite(int *socket, const void *buf, int len);
|
||||
|
||||
/*! <pre>
|
||||
class for encapsulating TCP/IP socket calls
|
||||
</pre> */
|
||||
class rlSocket
|
||||
{
|
||||
public:
|
||||
|
||||
enum SocketEnum
|
||||
{
|
||||
SOCKET_ERR = -1,
|
||||
SETSOCKOPT_ERR = -2,
|
||||
LISTEN_ERR = -3,
|
||||
ACCEPT_ERR = -4,
|
||||
INET_ADDR_ERR = -5,
|
||||
CONNECT_ERR = -6,
|
||||
PORT_ERR = -7
|
||||
};
|
||||
|
||||
/*! <pre>
|
||||
construct a new rlSocket but do not connect
|
||||
adr = hostname | dotted address
|
||||
port = port number of socket
|
||||
active = 0 wait for connections with accept()
|
||||
active = 1 open the connection with connect()
|
||||
active = 2 neither accept() nor connect()
|
||||
</pre> */
|
||||
rlSocket(const char *adr, int port, int active);
|
||||
|
||||
/*! <pre>
|
||||
construct a new rlSocket
|
||||
use connection on open socket
|
||||
</pre> */
|
||||
rlSocket(int socket);
|
||||
|
||||
|
||||
/*! <pre>
|
||||
destruct the socket
|
||||
attention if active = 0 the socket will still be bound to port
|
||||
</pre> */
|
||||
virtual ~rlSocket();
|
||||
|
||||
/*! <pre>
|
||||
set adr to a different adr than in the constructor
|
||||
</pre> */
|
||||
void setAdr(const char *adr);
|
||||
|
||||
/*! <pre>
|
||||
set port to a different port than in the constructor
|
||||
</pre> */
|
||||
void setPort(int port);
|
||||
|
||||
/*! <pre>
|
||||
get port
|
||||
</pre> */
|
||||
int getPort();
|
||||
|
||||
/*! <pre>
|
||||
set port active = 0|1
|
||||
</pre> */
|
||||
void setActive(int active);
|
||||
|
||||
/*! <pre>
|
||||
read a block of data
|
||||
len = length of data to be read
|
||||
timeout = 0 wait indefinite
|
||||
timeout > 0 wait at maximum for timeout milliseconds
|
||||
return > 0 length of message read
|
||||
return == 0 timeout
|
||||
return < 0 error
|
||||
</pre> */
|
||||
int read(void *buf, int len, int timeout=0);
|
||||
|
||||
/*! <pre>
|
||||
read a '\n' terminated string
|
||||
len = max length of data to be read
|
||||
timeout = 0 wait indefinite
|
||||
timeout > 0 wait at maximum for timeout milliseconds
|
||||
return > 0 length of message read
|
||||
return == 0 timeout
|
||||
return < 0 error
|
||||
</pre> */
|
||||
int readStr(char *buf, int len, int timeout=0);
|
||||
|
||||
/*! <pre>
|
||||
read a http header and return Content-Length
|
||||
return < 0 error
|
||||
</pre> */
|
||||
int readHttpHeader(rlString *header, int timeout=0);
|
||||
|
||||
/*! <pre>
|
||||
write a block of data
|
||||
return > 0 length of data written
|
||||
return < 0 error
|
||||
</pre> */
|
||||
int write(const void *buf, int len);
|
||||
|
||||
/*! <pre>
|
||||
similar to printf
|
||||
return > 0 length of data written
|
||||
return < 0 error
|
||||
</pre> */
|
||||
int printf(const char *format, ...);
|
||||
|
||||
/*! <pre>
|
||||
connect
|
||||
return >= 0 socket used
|
||||
return < 0 error (see: enum SocketEnum)
|
||||
</pre> */
|
||||
int connect();
|
||||
|
||||
/*! <pre>
|
||||
disconnect
|
||||
return = 0
|
||||
</pre> */
|
||||
int disconnect();
|
||||
|
||||
/*! <pre>
|
||||
wait for data arriving on socket
|
||||
timeout > 0 timeout in milliseconds
|
||||
timeout == 0 indefinite timeout
|
||||
return = 1 DATA_AVAILABLE
|
||||
return = 0 TIMEOUT
|
||||
</pre> */
|
||||
int select(int timeout=0);
|
||||
|
||||
/*! <pre>
|
||||
return == 1 socket is connected
|
||||
return == 0 socket is not connected
|
||||
</pre> */
|
||||
int isConnected();
|
||||
|
||||
/*! <pre>
|
||||
default: prefer IPV4
|
||||
if(ip==6) prefer IPV6
|
||||
else prefer IPV4
|
||||
</pre> */
|
||||
int setIPVersion(int version);
|
||||
|
||||
/*! <pre>
|
||||
return == 4 IPV4
|
||||
return == 6 IPV6
|
||||
</pre> */
|
||||
int getIPVersion();
|
||||
|
||||
/*! <pre>
|
||||
This method is intendet for data providers implemented as ProcessViewServer
|
||||
</pre> */
|
||||
int sendProcessViewBrowserButtonEvent(int id);
|
||||
|
||||
/*! <pre>
|
||||
this is the real socket used for communication
|
||||
s >= 0 connected
|
||||
s == -1 disconnected
|
||||
</pre> */
|
||||
int s;
|
||||
|
||||
/*! <pre>
|
||||
portable version of getsockopt
|
||||
</pre> */
|
||||
static int rlGetsockopt(int sockfd, int level, int optname, void *optval, int *optlen);
|
||||
|
||||
/*! <pre>
|
||||
portable version of setsockopt
|
||||
</pre> */
|
||||
static int rlSetsockopt(int sockfd, int level, int optname, const void *optval, int optlen);
|
||||
|
||||
/*! <pre>
|
||||
get an option from this->s
|
||||
</pre> */
|
||||
int rlGetsockopt(int level, int optname);
|
||||
|
||||
/*! <pre>
|
||||
set an option on this->s
|
||||
</pre> */
|
||||
int rlSetsockopt(int level, int optname);
|
||||
|
||||
/*! <pre>
|
||||
read the response to a http get request until Content-Length is received
|
||||
Tip: char line[256];
|
||||
</pre> */
|
||||
int readHttpContentLength(int timeout);
|
||||
|
||||
/*! <pre>
|
||||
this array can be casted to (struct sockaddr *) &sockaddr[0];
|
||||
in case of active==0 it will store sockaddr of the last client
|
||||
(48 bytes spare)
|
||||
|
||||
struct sockaddr {
|
||||
unsigned short sa_family; // address family, AF_xxx
|
||||
char sa_data[14]; // 14 bytes of protocol address
|
||||
};
|
||||
|
||||
// IPv4 AF_INET sockets:
|
||||
struct sockaddr_in {
|
||||
short sin_family; // e.g. AF_INET, AF_INET6
|
||||
unsigned short sin_port; // e.g. htons(3490)
|
||||
struct in_addr sin_addr; // see struct in_addr, below
|
||||
char sin_zero[8]; // zero this if you want to
|
||||
};
|
||||
struct in_addr {
|
||||
unsigned long s_addr; // load with inet_pton()
|
||||
};
|
||||
|
||||
// IPv6 AF_INET6 sockets:
|
||||
struct sockaddr_in6 {
|
||||
u_int16_t sin6_family; // address family, AF_INET6
|
||||
u_int16_t sin6_port; // port number, Network Byte Order
|
||||
u_int32_t sin6_flowinfo; // IPv6 flow information
|
||||
struct in6_addr sin6_addr; // IPv6 address
|
||||
u_int32_t sin6_scope_id; // Scope ID
|
||||
};
|
||||
struct in6_addr {
|
||||
unsigned char s6_addr[16]; // load with inet_pton()
|
||||
};
|
||||
</pre> */
|
||||
unsigned char sockaddr[16+48];
|
||||
|
||||
private:
|
||||
char adr[132];
|
||||
int port;
|
||||
int active;
|
||||
int os;
|
||||
int first;
|
||||
int prefer_ipv6;
|
||||
int rl_ipversion;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user