本文整理汇总了C++中WebSocket类的典型用法代码示例。如果您正苦于以下问题:C++ WebSocket类的具体用法?C++ WebSocket怎么用?C++ WebSocket使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WebSocket类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: jsWebSocketPrototypeFunctionDispatchEvent
EncodedJSValue JSC_HOST_CALL jsWebSocketPrototypeFunctionDispatchEvent(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&JSWebSocket::s_info))
return throwVMTypeError(exec);
JSWebSocket* castedThis = static_cast<JSWebSocket*>(asObject(thisValue));
WebSocket* imp = static_cast<WebSocket*>(castedThis->impl());
ExceptionCode ec = 0;
Event* evt(toEvent(exec->argument(0)));
if (exec->hadException())
return JSValue::encode(jsUndefined());
JSC::JSValue result = jsBoolean(imp->dispatchEvent(evt, ec));
setDOMException(exec, ec);
return JSValue::encode(result);
}
示例2: run
void run(void* data) {
uint8_t buffer[1000];
WebSocket *pWebSocket = (WebSocket*) data;
// do something
Socket peerSocket = pWebSocket->getSocket();
ESP_LOGD(LOG_TAG, "Waiting on socket data for socket %s", peerSocket.toString().c_str());
int length = peerSocket.receive_cpp(buffer, sizeof(buffer));
ESP_LOGD(LOG_TAG, "Received data from web socket. Length: %d", length);
GeneralUtils::hexDump(buffer, length);
dumpFrame(*(Frame *)buffer);
// The following section parses the WebSocket frame.
if (length > 0) {
Frame* pFrame = (Frame*)buffer;
uint32_t payloadLen = 0;
uint8_t* pMask = nullptr;
uint8_t* pData;
if (pFrame->len < 126) {
payloadLen = pFrame->len;
pMask = buffer + 2;
} else if (pFrame->len == 126) {
payloadLen = *(uint16_t*)(buffer+2);
pMask = buffer + 4;
} else if (pFrame->len == 127) {
ESP_LOGE(LOG_TAG, "Too much data!");
return;
}
if (pFrame->mask == 1) {
pData = pMask + 4;
for (int i=0; i<payloadLen; i++) {
*pData = *pData ^ pMask[i%4];
pData++;
}
pData = pMask + 4;
} else {
pData = pMask;
}
std::string retData = std::string((char *)pData, payloadLen);
ESP_LOGD(LOG_TAG, "Resulting payload:");
GeneralUtils::hexDump(pData, payloadLen);
}
} // run
示例3: disconnect
void SIOClientImpl::disconnect()
{
if(_ws->getReadyState() == WebSocket::State::OPEN)
{
std::string s = "0::";
_ws->send(s);
log("Disconnect sent");
_ws->close();
}
Director::getInstance()->getScheduler()->unscheduleAllForTarget(this);
_connected = false;
SocketIO::getInstance()->removeSocket(_uri);
}
示例4: jsWebSocketPrototypeFunctionSend
EncodedJSValue JSC_HOST_CALL jsWebSocketPrototypeFunctionSend(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&JSWebSocket::s_info))
return throwVMTypeError(exec);
JSWebSocket* castedThis = static_cast<JSWebSocket*>(asObject(thisValue));
WebSocket* imp = static_cast<WebSocket*>(castedThis->impl());
if (exec->argumentCount() < 1)
return JSValue::encode(jsUndefined());
ExceptionCode ec = 0;
const String& data(ustringToString(exec->argument(0).toString(exec)));
if (exec->hadException())
return JSValue::encode(jsUndefined());
JSC::JSValue result = jsBoolean(imp->send(data, ec));
setDOMException(exec, ec);
return JSValue::encode(result);
}
示例5: WebSocket
void WebSocketServer::listen() {
// First check existing connections:
for( byte x=0; x < m_maxConnections; x++ )
{
if( !m_connections[x] )
continue;
WebSocket *s = m_connections[x];
if( !s->isConnected() )
{
m_connectionCount--;
delete s;
m_connections[x] = NULL;
continue;
}
s->listen();
}
EthernetClient cli = m_server.available();
if( !cli )
return;
// Find a slot:
for( byte x=0; x < m_maxConnections; x++ )
{
if( m_connections[x] )
continue;
WebSocket *s = new WebSocket(this, cli);
m_connections[x] = s;
m_connectionCount++;
#ifdef DEBUG
Serial.println(F("Websocket client connected."));
#endif
return;
}
// No room!
#ifdef DEBUG
Serial.println(F("Cannot accept new websocket client, maxConnections reached!"));
#endif
cli.stop();
}
示例6: checkWebSocket
/**
* @author John M. Harris, Jr.
* @internal
*/
int WebSocket::lua_close(lua_State* L){
WebSocket* LuaWebSocket = checkWebSocket(L, 1);
if(LuaWebSocket){
if(LuaWebSocket->m_webSocket){
if(LuaWebSocket->m_webSocket->getState() == QAbstractSocket::ConnectedState){
ob_enum::LuaEnumItem* val = ob_enum::checkEnumItem(L, 2, ob_enum::LuaCloseCode);
ob_enum::CloseCode cc = ob_enum::CloseCode::Normal;
if(val){
cc = (ob_enum::CloseCode)val->value;
}
QString reason;
if(lua_isstring(L, 3)){
reason = QString(lua_tostring(L, 3));
}
LuaWebSocket->close(cc, reason);
return 0;
}
}
luaL_error(L, "WebSocket is already closed.");
}
return 0;
}
示例7: WebSocket
bool HttpServer::initWebSocket(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response)
{
if (!wsEnabled)
return false;
WebSocket *sock = new WebSocket(&connection);
if (!sock->initialize(request, response))
return false;
connection.setTimeOut(USHRT_MAX); //Disable disconnection on connection idle (no rx/tx)
connection.setDisconnectionHandler(HttpServerConnectionDelegate(&HttpServer::onCloseWebSocket, this)); // auto remove on close
response.sendHeader(connection); // Will push header before user data
wsocks.addElement(sock);
if (wsConnect) wsConnect(*sock);
if (wsCommandEnabled && (request.getQueryParameter(wsCommandRequestParam) == "true"))
{
debugf("WebSocket Commandprocessor started");
sock->enableCommand();
}
}
示例8: _webSocketData
int Server::_webSocketData(struct mg_connection *conn, string data)
{
WebSocket *websocket = websockets.getWebSocket(conn);
if (websocket != NULL) {
websocket->appendData(data);
string fullPacket = websocket->flushData();
vector<Controller *>::iterator it;
for (it=controllers.begin(); it!=controllers.end(); it++) {
(*it)->webSocketData(websocket, fullPacket);
}
if (websocket->isClosed()) {
websockets.remove(websocket);
return 0;
} else {
return -1;
}
} else {
return 0;
}
}
示例9: log
void SIOClientImpl::openSocket()
{
log("SIOClientImpl::openSocket() called");
std::stringstream s;
s << _uri << "/socket.io/1/websocket/" << _sid;
_ws = new WebSocket();
if (!_ws->init(*this, s.str()))
{
CC_SAFE_DELETE(_ws);
}
return;
}
示例10: WebSocket
/*!
\internal
*/
WebSocket *WebSocket::upgradeFrom(QTcpSocket *pTcpSocket,
const HandshakeRequest &request,
const HandshakeResponse &response,
QObject *parent)
{
WebSocket *pWebSocket = new WebSocket(pTcpSocket, response.getAcceptedVersion(), parent);
pWebSocket->setExtension(response.getAcceptedExtension());
pWebSocket->setOrigin(request.getOrigin());
pWebSocket->setRequestUrl(request.getRequestUrl());
pWebSocket->setProtocol(response.getAcceptedProtocol());
pWebSocket->setResourceName(request.getRequestUrl().toString(QUrl::RemoveUserInfo));
pWebSocket->enableMasking(false); //a server should not send masked frames
return pWebSocket;
}
示例11: QCOMPARE
void WebSocketTest::properties()
{
WebSocket websocket;
QCOMPARE(websocket.messagesType(), WebSocket::BINARY_MESSAGE);
websocket.setMessagesType(WebSocket::TEXT_MESSAGE);
QCOMPARE(websocket.messagesType(), WebSocket::TEXT_MESSAGE);
websocket.setMessagesType(WebSocket::BINARY_MESSAGE);
QCOMPARE(websocket.messagesType(), WebSocket::BINARY_MESSAGE);
}
示例12: main
int main( int argc, const char** argv )
{
int camera_number = 0;
char socket_url[512];
TopCodeScanner scanner;
WebSocket *socket = NULL;
if (argc < 2) {
cerr << "expected: " << argv[0] << " <camera_number> [socket server]" << endl;
cerr << " example: > topcodes 0 ws://localhost:8126/topcodes" << endl;
return -1;
}
// get the camera number
camera_number = atoi(argv[1]); // 0 if error
if (argc >= 3) {
socket = WebSocket::from_url(argv[2]);
} else {
socket = WebSocket::from_url("ws://localhost:8126/topcodes");
}
// open the default camera
VideoCapture cap(camera_number);
if (!cap.isOpened()) {
cerr << "Error: Unable to open webcam " << camera_number << endl;
return -1;
}
for(;;)
{
Mat frame, grey, flipped;
// capture the next still video frame
cap >> frame;
// flip the image horizontally so that it gives you a mirror reflection
flip(frame, flipped, 1);
// convert to greyscale
cvtColor(flipped, grey, CV_RGB2GRAY);
// scan for topcodes
vector<TopCode*> *codes = scanner.scan(grey);
// send topcode info through the websocket
if (socket) {
string json = "[\n";
for (int i=0; i<codes->size(); i++) {
TopCode *code = (*codes)[i];
json += (" " + code->toJSON() + ",\n");
}
json += "]";
socket->send(json);
socket->poll();
socket->dispatch(handle_message);
}
// show the resulting image (debuggin)
imshow("webcam", grey);
// press the 'q' key to quit
if (waitKey(30) >= 0) break;
}
if (socket) delete socket;
}
示例13: wsThreadEntryFunc
void* WsThreadHelper::wsThreadEntryFunc(void* arg)
{
_ws->onSubThreadStarted();
while (!_needQuit)
{
if (_ws->onSubThreadLoop())
{
break;
}
}
_ws->onSubThreadEnded();
return (void*)0;
}
示例14: update
void WsThreadHelper::update(float dt)
{
WsMessage *msg = nullptr;
// Returns quickly if no message
_UIWsMessageQueueMutex.lock();
if (0 == _UIWsMessageQueue->size())
{
_UIWsMessageQueueMutex.unlock();
return;
}
// Gets message
msg = *(_UIWsMessageQueue->begin());
_UIWsMessageQueue->pop_front();
_UIWsMessageQueueMutex.unlock();
if (_ws)
{
_ws->onUIThreadReceiveMessage(msg);
}
CC_SAFE_DELETE(msg);
}
示例15: connectToEndpoint
void SIOClientImpl::connectToEndpoint(const std::string& endpoint)
{
std::string path = endpoint == "/" ? "" : endpoint;
std::string s = "1::" + path;
_ws->send(s);
}