acl  3.5.3.0
acl::websocket类 参考

#include <websocket.hpp>

+ 类 acl::websocket 继承关系图:
+ acl::websocket 的协作图:

Public 成员函数

 websocket (socket_stream &client)
 
 ~websocket (void)
 
websocketreset (void)
 
socket_streamget_stream (void) const
 
websocketset_frame_fin (bool yes)
 
websocketset_frame_rsv1 (bool yes)
 
websocketset_frame_rsv2 (bool yes)
 
websocketset_frame_rsv3 (bool yes)
 
websocketset_frame_opcode (unsigned char type)
 
websocketset_frame_payload_len (unsigned long long len)
 
websocketset_frame_masking_key (unsigned int mask)
 
bool send_frame_data (const void *data, size_t len)
 
bool send_frame_data (void *data, size_t len)
 
bool send_frame_data (const char *str)
 
bool send_frame_data (char *str)
 
bool send_frame_pong (const void *data, size_t len)
 
bool send_frame_pong (void *data, size_t len)
 
bool send_frame_pong (const char *str)
 
bool send_frame_pong (char *str)
 
bool send_frame_ping (const void *data, size_t len)
 
bool send_frame_ping (void *data, size_t len)
 
bool send_frame_ping (const char *str)
 
bool send_frame_ping (char *str)
 
bool send_frame_data (aio_socket_stream &conn, void *data, size_t len)
 
bool send_frame_text (aio_socket_stream &conn, char *data, size_t len)
 
bool send_frame_binary (aio_socket_stream &conn, void *data, size_t len)
 
bool send_frame_ping (aio_socket_stream &conn, void *data, size_t len)
 
bool send_frame_pong (aio_socket_stream &conn, void *data, size_t len)
 
bool read_frame_head (void)
 
int read_frame_data (void *buf, size_t size)
 
bool peek_frame_head (void)
 
int peek_frame_data (char *buf, size_t size)
 
int peek_frame_data (string &buf, size_t size)
 
bool is_head_finish (void) const
 
bool eof (void)
 
const frame_headerget_frame_header (void) const
 
bool frame_is_fin (void) const
 
bool frame_is_rsv1 (void) const
 
bool frame_is_rsv2 (void) const
 
bool frame_is_rsv3 (void) const
 
unsigned char get_frame_opcode (void) const
 
bool frame_has_mask (void) const
 
unsigned long long get_frame_payload_len (void) const
 
unsigned int get_frame_masking_key (void) const
 
unsigned long long get_frame_payload_nread (void) const
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

websocket 基础类

在文件 websocket.hpp71 行定义.

构造及析构函数说明

◆ websocket()

acl::websocket::websocket ( socket_stream client)

构造方法

参数
client{socket_stream&}

◆ ~websocket()

acl::websocket::~websocket ( void  )

成员函数说明

◆ eof()

bool acl::websocket::eof ( void  )

判断当前网络连接是否已经断开

返回
{bool}

◆ frame_has_mask()

bool acl::websocket::frame_has_mask ( void  ) const
inline

获得本数据帧是否设置了掩码

返回
{bool}

在文件 websocket.hpp335 行定义.

336  {
337  return header_.mask;
338  }

◆ frame_is_fin()

bool acl::websocket::frame_is_fin ( void  ) const
inline

判断本帧是否为结束帧

返回
{bool}

在文件 websocket.hpp290 行定义.

291  {
292  return header_.fin;
293  }

◆ frame_is_rsv1()

bool acl::websocket::frame_is_rsv1 ( void  ) const
inline

判断本帧是否设置了保留标志位

返回
{bool}

在文件 websocket.hpp299 行定义.

300  {
301  return header_.rsv1;
302  }

◆ frame_is_rsv2()

bool acl::websocket::frame_is_rsv2 ( void  ) const
inline

判断本帧是否设置了保留标志位

返回
{bool}

在文件 websocket.hpp308 行定义.

309  {
310  return header_.rsv2;
311  }

◆ frame_is_rsv3()

bool acl::websocket::frame_is_rsv3 ( void  ) const
inline

判断本帧是否设置了保留标志位

返回
{bool}

在文件 websocket.hpp317 行定义.

318  {
319  return header_.rsv3;
320  }

◆ get_frame_header()

const frame_header& acl::websocket::get_frame_header ( void  ) const
inline

获得读到的数据帧的帧头

返回
{const frame_header&}

在文件 websocket.hpp281 行定义.

282  {
283  return header_;
284  }

◆ get_frame_masking_key()

unsigned int acl::websocket::get_frame_masking_key ( void  ) const
inline

获得本数据帧的掩码值

返回
{unsigned int}

在文件 websocket.hpp353 行定义.

354  {
355  return header_.masking_key;
356  }
unsigned int masking_key
Definition: websocket.hpp:52

◆ get_frame_opcode()

unsigned char acl::websocket::get_frame_opcode ( void  ) const
inline

获得本数据帧的状态码,参见上面:FRAME_XXX

返回
{unsigned char}

在文件 websocket.hpp326 行定义.

327  {
328  return header_.opcode;
329  }
unsigned char opcode
Definition: websocket.hpp:49

◆ get_frame_payload_len()

unsigned long long acl::websocket::get_frame_payload_len ( void  ) const
inline

获得本数据帧的数据体长度

返回
{unsigned long long}

在文件 websocket.hpp344 行定义.

345  {
346  return header_.payload_len;
347  }
unsigned long long payload_len
Definition: websocket.hpp:51

◆ get_frame_payload_nread()

unsigned long long acl::websocket::get_frame_payload_nread ( void  ) const
inline

获得本数据帧已读到的数据长度

返回
{unsigned long long}

在文件 websocket.hpp362 行定义.

363  {
364  return payload_nread_;
365  }

◆ get_stream()

socket_stream& acl::websocket::get_stream ( void  ) const
inline

获得本类对象所绑定的 socket_stream 对象

返回
{socket_stream&}

在文件 websocket.hpp90 行定义.

91  {
92  return client_;
93  }

◆ is_head_finish()

bool acl::websocket::is_head_finish ( void  ) const

判断当前是否已读完 websocket 帧头数据

返回
{bool}

◆ peek_frame_data() [1/2]

int acl::websocket::peek_frame_data ( char *  buf,
size_t  size 
)

用在非阻塞网络通信中,尝试读取 websocket 数据体,可以循环调用本方法

参数
buf{char*} 存放读到的数据
size{size_t} buf 的空间大小
返回
{int} 读到的数据长度,当返回值为: 0: 表示本帧的数据体读完毕 -1: 表示读出错,需通过调用 eof() 判断连接是否已经关闭 >0: 表示本次读到的数据长度

◆ peek_frame_data() [2/2]

int acl::websocket::peek_frame_data ( string buf,
size_t  size 
)

◆ peek_frame_head()

bool acl::websocket::peek_frame_head ( void  )

用在非阻塞网络通信中,尝试读取 websocket 数据头,可以循环调用本方法 走到该方法返回 true 表示读到了完整的 websocket 头;如果返回 false, 则需通过 eof() 方法来判断网络连接是否已经断开,如 eof() 返回 true, 则应释放本对象

返回
{bool} 返回 true 表示读到了完整的 websocket 头,可以通过调用 read_frame_data() 来读取数据体

◆ read_frame_data()

int acl::websocket::read_frame_data ( void *  buf,
size_t  size 
)

读取数据帧数据体,需要循环调用本方法直至正常结束或出错

参数
buf{void*} 存放数据的缓冲区
size{size_t} buf 数据缓冲区大小
返回
{int} 返回值 > 0 表示读到的数据长度需再次读,== 0 表示读结束, < 0 表示读出错

◆ read_frame_head()

bool acl::websocket::read_frame_head ( void  )

读取数据帧帧头

返回
{bool}

◆ reset()

websocket& acl::websocket::reset ( void  )

当类对象被重复使用时,需要通过本方法将状态重重

◆ send_frame_binary()

bool acl::websocket::send_frame_binary ( aio_socket_stream conn,
void *  data,
size_t  len 
)

异步发送一个 FRAME_BINARY 类型的数据帧

参数
conn{aio_socket_stream&}
data{char*}
len{size_t}
返回
{bool}

◆ send_frame_data() [1/5]

bool acl::websocket::send_frame_data ( const void *  data,
size_t  len 
)

发送数制帧中的数据体,可以循环调用本方法发送本帧的数据,发送数据 总长度(即多次调用本方法的数据长度之和)应与 set_frame_payload_len 方法设置的值相同

参数
data{const void*}
len{size_t}
返回
{bool} 发送是否成功

◆ send_frame_data() [2/5]

bool acl::websocket::send_frame_data ( void *  data,
size_t  len 
)

◆ send_frame_data() [3/5]

bool acl::websocket::send_frame_data ( const char *  str)

◆ send_frame_data() [4/5]

bool acl::websocket::send_frame_data ( char *  str)

◆ send_frame_data() [5/5]

bool acl::websocket::send_frame_data ( aio_socket_stream conn,
void *  data,
size_t  len 
)

调用非阻塞发送接口异步发送数据,当发送完数据后,应用层应该调用 reset() 方法重置状态,在发送一个数据包前,应用层需要调用以上的 set_frame_xxx 方法用来设置每一个数据包的帧头信息

参数
conn{aio_socket_stream&}
data{void*} 要发送的数据,内部会被修改
len{size_t} data 数据长度
返回
{bool} 是否出错

◆ send_frame_ping() [1/5]

bool acl::websocket::send_frame_ping ( const void *  data,
size_t  len 
)

发送 PING 数据帧

参数
data{const void*} PING 数据帧的数据载体,可以为 NULL
len{size_t} data 数据长度,当 data 为 NULL 或 len 为 0 时, 表示没有数据载荷
返回
{bool} 发送是否成功

◆ send_frame_ping() [2/5]

bool acl::websocket::send_frame_ping ( void *  data,
size_t  len 
)

◆ send_frame_ping() [3/5]

bool acl::websocket::send_frame_ping ( const char *  str)

◆ send_frame_ping() [4/5]

bool acl::websocket::send_frame_ping ( char *  str)

◆ send_frame_ping() [5/5]

bool acl::websocket::send_frame_ping ( aio_socket_stream conn,
void *  data,
size_t  len 
)

异步发送一个 FRAME_PING 类型的数据帧

参数
conn{aio_socket_stream&}
data{char*}
len{size_t}
返回
{bool}

◆ send_frame_pong() [1/5]

bool acl::websocket::send_frame_pong ( const void *  data,
size_t  len 
)

发送 PONG 数据帧

参数
data{const void*} PONG 数据帧的数据载体,可以为 NULL
len{size_t} data 数据长度,当 data 为 NULL 或 len 为 0 时, 表示没有数据载荷
返回
{bool} 发送是否成功

◆ send_frame_pong() [2/5]

bool acl::websocket::send_frame_pong ( void *  data,
size_t  len 
)

◆ send_frame_pong() [3/5]

bool acl::websocket::send_frame_pong ( const char *  str)

◆ send_frame_pong() [4/5]

bool acl::websocket::send_frame_pong ( char *  str)

◆ send_frame_pong() [5/5]

bool acl::websocket::send_frame_pong ( aio_socket_stream conn,
void *  data,
size_t  len 
)

异步发送一个 FRAME_PONG 类型的数据帧

参数
conn{aio_socket_stream&}
data{char*}
len{size_t}
返回
{bool}

◆ send_frame_text()

bool acl::websocket::send_frame_text ( aio_socket_stream conn,
char *  data,
size_t  len 
)

异步发送一个 FRAME_TEXT 类型的数据帧

参数
conn{aio_socket_stream&}
data{char*}
len{size_t}
返回
{bool}

◆ set_frame_fin()

websocket& acl::websocket::set_frame_fin ( bool  yes)

设置是否结束的标志位

参数
yes{bool}
返回
{websocket&}

◆ set_frame_masking_key()

websocket& acl::websocket::set_frame_masking_key ( unsigned int  mask)

设置数据帧数据的掩码值,客户端模式下必须设置此项

参数
mask{unsigned int}
返回
{websocket&}

◆ set_frame_opcode()

websocket& acl::websocket::set_frame_opcode ( unsigned char  type)

设置数据帧类型,参见上面定义:FRAME_XXX

参数
type{unsigned char}
返回
{websocket&}

◆ set_frame_payload_len()

websocket& acl::websocket::set_frame_payload_len ( unsigned long long  len)

设置本数据帧数据载体的总长度

参数
len{unsigned long long}
返回
{websocket&}

◆ set_frame_rsv1()

websocket& acl::websocket::set_frame_rsv1 ( bool  yes)

设置保留标志位

参数
yes{bool}
返回
{websocket&}

◆ set_frame_rsv2()

websocket& acl::websocket::set_frame_rsv2 ( bool  yes)

设置保留标志位

参数
yes{bool}
返回
{websocket&}

◆ set_frame_rsv3()

websocket& acl::websocket::set_frame_rsv3 ( bool  yes)

设置保留标志位

参数
yes{bool}
返回
{websocket&}

该类的文档由以下文件生成: