UE Websocket筆記

參考鏈接

[UE4 C++入門到進階]12.Websocket網絡通信 - 嗶哩嗶哩?包含怎么用Nodejs 寫測試服務器

UE4_使用WebSocket和Json(上) - 知乎?包含Python寫測試服務器

UE4_使用WebSocket和Json(下) - 知乎

示例代碼

xxx.Build.cs"WebSockets"
.h#include "CoreMinimal.h"
#include "Subsystems/WorldSubsystem.h"
#include "IWebSocket.h"
#include "PTNetworkSubsystem.generated.h"/*** */
UCLASS()
class PIECETOGETHERTOOLS_API UPTNetworkSubsystem : public UWorldSubsystem
{GENERATED_BODY()virtual void Initialize(FSubsystemCollectionBase& Collection) override;virtual void Deinitialize() override;/// <summary>/// 連接成功/// </summary>UFUNCTION()void OnConnectedCallback();/// <summary>/// 連接錯誤/// </summary>/// <param name="Error"></param>UFUNCTION()void OnConnectionErrorCallback(const FString& Error);/// <summary>/// 接收數據/// </summary>/// <param name="Message"></param>UFUNCTION()void OnReceivedMessageCallback(const FString& Message);/// <summary>/// 關閉回調/// </summary>/// <param name="Code"></param>/// <param name="Reason"></param>/// <param name="bWasClean"></param>UFUNCTION()void OnClosedCallback(int32 Code, const FString& Reason, bool bWasClean);/// <summary>/// 連接服務器/// </summary>/// <param name="URL"></param>UFUNCTION(BlueprintCallable, Category = "Vince|Network")void ConnectToServer(const FString URL);/// <summary>/// 發送信息/// </summary>/// <param name="Message"></param>UFUNCTION(BlueprintCallable, Category = "Vince|Network")void SendMessage(const FString Message);/// <summary>/// 手動關閉/// </summary>UFUNCTION(BlueprintCallable, Category = "Vince|Network")void Disconnect();TSharedPtr<class IWebSocket>Socket;};
.cpp#include "PTNetworkSubsystem.h"
#include "WebSockets/Public/WebSocketsModule.h"
//#include "AsyncHttpObject.h"void UPTNetworkSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{Super::Initialize(Collection);if (!FModuleManager::Get().IsModuleLoaded("WebSockets")){FModuleManager::Get().LoadModule("WebSockets");}}void UPTNetworkSubsystem::Deinitialize()
{Disconnect();Super::Deinitialize();
}void UPTNetworkSubsystem::OnConnectedCallback()
{UE_LOG(LogTemp, Warning, TEXT("連接成功"));
}void UPTNetworkSubsystem::OnConnectionErrorCallback(const FString& Error)
{UE_LOG(LogTemp, Warning, TEXT("連接錯誤,Error:%s"), *Error);
}void UPTNetworkSubsystem::OnReceivedMessageCallback(const FString& Message)
{UE_LOG(LogTemp, Warning, TEXT("收到消息,Message:%s"), *Message);/*示例{"Topic": "Unreal","List" : {"Key": "mood","Value" : 1.0}}*/TSharedPtr<FJsonObject> RootObj = MakeShareable(new FJsonObject());TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(Message);if (FJsonSerializer::Deserialize(JsonReader, RootObj)) // 通過JsonReader讀取RootObj{FString Topic = RootObj->GetStringField("Topic"); // TopicUE_LOG(LogTemp, Warning, TEXT("%s Topic:%s"), *FString(__FUNCTION__), *Topic);TSharedPtr<FJsonObject> ListObj = MakeShareable(new FJsonObject());ListObj = RootObj->GetObjectField("List"); // List FString Key = ListObj->GetStringField("Key"); // KeyUE_LOG(LogTemp, Warning, TEXT("%s Key:%s"), *FString(__FUNCTION__), *Key);float Value = ListObj->GetNumberField("Value"); // ValueGEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Cyan, FString::Printf(TEXT("Value %d"), Value), true);}}void UPTNetworkSubsystem::OnClosedCallback(int32 Code, const FString& Reason, bool bWasClean)
{UE_LOG(LogTemp, Warning, TEXT("連接關閉,Code:%d,reason:%s"), Code, *Reason);
}void UPTNetworkSubsystem::ConnectToServer(const FString URL)
{//創建Websocket對象Socket = FWebSocketsModule::Get().CreateWebSocket(URL);// Bind Events// Socket->OnConnectionError().AddLambda([](const FString& Error)->//         void{UE_LOG(LogTemp,Warning,TEXT("%s"),*Error)}); // Lambda綁定方式//綁定連接成功回調Socket->OnConnected().AddUObject(this, &UPTNetworkSubsystem::OnConnectedCallback);//綁定連接失敗回調Socket->OnConnectionError().AddUObject(this, &UPTNetworkSubsystem::OnConnectionErrorCallback);//綁定連接關閉回調Socket->OnClosed().AddUObject(this, &UPTNetworkSubsystem::OnClosedCallback);//綁定收到消息回調Socket->OnMessage().AddUObject(this, &UPTNetworkSubsystem::OnReceivedMessageCallback);Socket->Connect();//UAsyncHttpObject::AsyncHttpDownload("https://t7.baidu.com/it/u=2621658848,3952322712&fm=193&f=GIF", FPaths::ProjectContentDir() + "Paks", "4");
}void UPTNetworkSubsystem::SendMessage(const FString Message)
{if (Socket.IsValid()){Socket->Send(Message);}
}void UPTNetworkSubsystem::Disconnect()
{if (Socket.IsValid()){UE_LOG(LogTemp, Warning, TEXT("手動關閉"));Socket->Close(1000, "手動關閉");}
}

*?Websoket 地址前綴只能是ws/wss/wss+insecure

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207640.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【React】使用react hooks實現評論示例

實現功能 1、渲染評論列表 2、刪除評論 3、渲染導航欄和高亮 4、評論列表排序功能 5、獲取評論 6、點擊發布按鈕發布評論 7、清空輸入框 8、重新聚焦 實現代碼 1、需要引入 import React, { useRef, useState } from react import avatar from "../logo.png" //頭…

[動態規劃及遞歸記憶搜索法]2.插入乘號

插入乘號 題目描述 給定一個非負整數&#xff0c;用k個乘號將其分割&#xff0c;使得乘積最大。 例如&#xff1a;在整數12345中插入兩個乘號&#xff0c;有以下插入法&#xff1a; 1*2*345 1*23*45 1*234*5 12*3*45 12*34*5 123*4*5 其中最大值是123*4*5 2460 關于輸入 一…

前端小技巧: 面向切面編程在前端代碼中的應用

面向切面編程 面向切面編程在java中提出這類概念但是在js沒有束縛和約定&#xff0c;只需要按編程思想來實現原理在js中使用function或class實現面向切面編程 面向切面概念 AOP (Aspect Oriented Programming) 面向切面編程主要實現目的是針對業務處理過程中的切面進行提取&…

第18章:隨堂復習與企業真題(JDK8-17新特性)

第18章&#xff1a;隨堂復習與企業真題&#xff08;JDK8-17新特性&#xff09; 一、隨堂復習 1. JDK新特性的概述 幾個重要的版本 jdk 5.0 / jdk 8.0 &#xff1a;里程碑式的版本jdk9.0 開始每6個月發布一個新的版本LTS : jdk8 、 jdk 11 、 jdk 17 如何學習新特性 > 角…

Android安全學習路標

1. Android操作系統基礎知識 首先&#xff0c;你需要建立堅實的Android操作系統基礎知識&#xff0c;包括Android架構、進程和內存管理、應用組件和權限模型等基本概念。 2. 安全防范理論 學習關于安全防范理論的基礎知識&#xff0c;包括常見的威脅模型、攻擊類型和安全風險…

Python-猜數字游戲

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主頁&#xff1a;一只程序猿子 博客主頁 &#x1f388; 個人介紹&#xff1a;愛好(bushi)編程&#xff01; &#x1f388; 創作不易&#xff1a;喜歡的話麻煩您點個&#x1f44d;和?&#xff01; &#x1f388;…

免費的AI改寫文案軟件,熱門AI改寫文案軟件【2024】

在數字化時代&#xff0c;文案創作變得更為便捷&#xff0c;其中AI改寫文案軟件的興起為寫作者們帶來了全新的創作體驗。這些工具通過智能算法和自然語言處理技術&#xff0c;能夠快速改寫文本&#xff0c;提高創作效率。本文將深入探討AI改寫文案軟件的現狀&#xff0c;介紹一…

LeetCode題:174. 地下城游戲

目錄 一、題目要求 二、解題思路 &#xff08;1&#xff09;狀態表示 &#xff08;2&#xff09;狀態轉移方程 &#xff08;3&#xff09;初始化dp表 &#xff08;4&#xff09;填表順序 &#xff08;5&#xff09;返回值 三、代碼 一、題目要求 174. 地下城游戲 惡魔們…

swagger入門

swagger入門 pom依賴 不用專門導入swagger 因為springboot已經將它集成了 org.springframework.boot spring-boot-starter com.github.xiaoymin knife4j-spring-boot-starter Swagger配置類 Configuration public class SwaggerConfig { // 創建并配置Docket Bean&#xf…

snakeyaml編輯yaml文件并覆蓋注釋

文章目錄 前言技術積累實戰演示1、引入maven依賴2、覆蓋注釋工具類3、snakeyaml工具類4、測試用例5、測試效果展示 寫在最后 前言 最近在做一個動態整合框架的項目&#xff0c;需要根據需求動態組裝各個功能模塊。其中就涉及到了在application.yaml中加入其他模塊的配置&#…

TCP傳輸層詳解(計算機網絡復習)

介紹&#xff1a;TCP/IP包含了一系列的協議&#xff0c;也叫TCP/IP協議族&#xff0c;簡稱TCP/IP。該協議族提供了點對點的連接機制&#xff0c;并將傳輸數據幀的封裝、尋址、傳輸、路由以及接收方式都予以標準化 TCP/IP的分層模型 在講TCP/IP協議之前&#xff0c;首先介紹一…

力扣貪心題解 跳躍游戲

55. 跳躍游戲 - 力扣&#xff08;LeetCode&#xff09; 給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &#xff1b…

信息系統開發方法

企業信息系統對于企業信息化的重要意義是不言而喻的。從實際運行的效果來看&#xff0c;有些信息系統運行得很成功&#xff0c;取得了巨大的經濟效益和社會效益&#xff1b;但也有些信息系統效果并不顯著&#xff0c;甚至還有個別信息系統開始時還能正常運行&#xff0c;可時間…

廣州數字孿生賦能工業制造,加速推進制造業數字化轉型

廣州數字孿生賦能工業制造&#xff0c;加速推進制造業數字化轉型。數字孿生系統基于歷史數據、實時數據&#xff0c;采用人工智能、大數據分析等新一代信息技術對物理實體的組成、特征、功能和性能進行數字化定義和建模。通過構建在信息世界對物理實體的等價映射&#xff0c;對…

Axure官方軟件安裝、漢化保姆級教程(帶官方資源下載)

1.下載漢化包 百度云鏈接&#xff1a;https://pan.baidu.com/s/1lluobjjBZvitASMt8e0A_w?pwdjqxn 提取碼&#xff1a; jqxn 2.解壓壓縮包 3.安裝Axure 進行安裝 點擊next 打勾&#xff0c;然后next, 默認是c盤&#xff0c;修改成自己的文件夾&#xff08;不要什么都放c盤里…

RestTemplate硬編碼的使用

RestTemplate是由Spring框架提供的一個可用于應用中調用rest服務的類它簡化了與http服務的通信方式&#xff0c;統一了RESTFul的標準&#xff0c;封裝了http連接&#xff0c;我們只需要傳入url及其返回值類型即可。相較于之前常用的HttpClient&#xff0c;RestTemplate是一種更…

API測試基礎之http協議

http簡介&#xff1a; http&#xff08;超文本傳輸協議&#xff09;是一個簡單的請求-響應協議&#xff0c;它通常運行在TCP&#xff08;傳輸控制協議&#xff09;之上。它指定了客戶端可能發送給服務器什么樣的消息以及得到什么樣的響應。請求和響應消息的頭以ASCII碼形式給出…

遠程控制如何賦能智能制造?貝銳向日葵制造業場景案例解析

隨著數字化轉型在制造業的不斷深入&#xff0c;企業在產線端也逐漸投入更多智能化設備&#xff0c;數字化、智能化設備其中一個比較顯著的優勢就是可以依托互聯網實現遠程運維和調試&#xff0c;大大提升產線設備的穩定性和工作效率&#xff1b;而遠程調試運維一個重要的實現方…

人工智能原理復習--搜索策略(一)

文章目錄 上一篇搜索概述一般圖搜索盲目搜索下一篇 上一篇 人工智能原理復習–確定性推理 搜索概述 問題求解分為兩大類&#xff1a;知識貧乏系統&#xff08;依靠搜索技術解決&#xff09;、知識豐富系統&#xff08;依靠推理技術&#xff09; 兩大類搜索技術&#xff1a; …

海思3516DV500下的目標識別算法運行評估,包含yolov7,yolov8

目前在3516DV500下&#xff0c;自己訓練的模型的評估實測結果。根據實際模型會有些許差異。 涉及到技術細節的部分因為商業用途&#xff0c;有部分省略。如需相關技術服務項目合作可私信聯系。 我司推出的目標識別跟蹤模塊&#xff0c;支持熱紅外、可見光主流多光譜視頻輸入與目…