当前位置:   article > 正文

UE Websocket笔记_ue4 websocket

ue4 websocket

参考链接

[UE4 C++入门到进阶]12.Websocket网络通信 - 哔哩哔哩 包含怎么用Nodejs 写测试服务器

UE4_使用WebSocket和Json(上) - 知乎 包含Python写测试服务器

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

示例代码

  1. xxx.Build.cs
  2. "WebSockets"
  1. .h
  2. #include "CoreMinimal.h"
  3. #include "Subsystems/WorldSubsystem.h"
  4. #include "IWebSocket.h"
  5. #include "PTNetworkSubsystem.generated.h"
  6. /**
  7. *
  8. */
  9. UCLASS()
  10. class PIECETOGETHERTOOLS_API UPTNetworkSubsystem : public UWorldSubsystem
  11. {
  12. GENERATED_BODY()
  13. virtual void Initialize(FSubsystemCollectionBase& Collection) override;
  14. virtual void Deinitialize() override;
  15. /// <summary>
  16. /// 连接成功
  17. /// </summary>
  18. UFUNCTION()
  19. void OnConnectedCallback();
  20. /// <summary>
  21. /// 连接错误
  22. /// </summary>
  23. /// <param name="Error"></param>
  24. UFUNCTION()
  25. void OnConnectionErrorCallback(const FString& Error);
  26. /// <summary>
  27. /// 接收数据
  28. /// </summary>
  29. /// <param name="Message"></param>
  30. UFUNCTION()
  31. void OnReceivedMessageCallback(const FString& Message);
  32. /// <summary>
  33. /// 关闭回调
  34. /// </summary>
  35. /// <param name="Code"></param>
  36. /// <param name="Reason"></param>
  37. /// <param name="bWasClean"></param>
  38. UFUNCTION()
  39. void OnClosedCallback(int32 Code, const FString& Reason, bool bWasClean);
  40. /// <summary>
  41. /// 连接服务器
  42. /// </summary>
  43. /// <param name="URL"></param>
  44. UFUNCTION(BlueprintCallable, Category = "Vince|Network")
  45. void ConnectToServer(const FString URL);
  46. /// <summary>
  47. /// 发送信息
  48. /// </summary>
  49. /// <param name="Message"></param>
  50. UFUNCTION(BlueprintCallable, Category = "Vince|Network")
  51. void SendMessage(const FString Message);
  52. /// <summary>
  53. /// 手动关闭
  54. /// </summary>
  55. UFUNCTION(BlueprintCallable, Category = "Vince|Network")
  56. void Disconnect();
  57. TSharedPtr<class IWebSocket>Socket;
  58. };
  1. .cpp
  2. #include "PTNetworkSubsystem.h"
  3. #include "WebSockets/Public/WebSocketsModule.h"
  4. //#include "AsyncHttpObject.h"
  5. void UPTNetworkSubsystem::Initialize(FSubsystemCollectionBase& Collection)
  6. {
  7. Super::Initialize(Collection);
  8. if (!FModuleManager::Get().IsModuleLoaded("WebSockets"))
  9. {
  10. FModuleManager::Get().LoadModule("WebSockets");
  11. }
  12. }
  13. void UPTNetworkSubsystem::Deinitialize()
  14. {
  15. Disconnect();
  16. Super::Deinitialize();
  17. }
  18. void UPTNetworkSubsystem::OnConnectedCallback()
  19. {
  20. UE_LOG(LogTemp, Warning, TEXT("连接成功"));
  21. }
  22. void UPTNetworkSubsystem::OnConnectionErrorCallback(const FString& Error)
  23. {
  24. UE_LOG(LogTemp, Warning, TEXT("连接错误,Error:%s"), *Error);
  25. }
  26. void UPTNetworkSubsystem::OnReceivedMessageCallback(const FString& Message)
  27. {
  28. UE_LOG(LogTemp, Warning, TEXT("收到消息,Message:%s"), *Message);
  29. /*
  30. 示例
  31. {
  32. "Topic": "Unreal",
  33. "List" : {
  34. "Key": "mood",
  35. "Value" : 1.0
  36. }
  37. }*/
  38. TSharedPtr<FJsonObject> RootObj = MakeShareable(new FJsonObject());
  39. TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(Message);
  40. if (FJsonSerializer::Deserialize(JsonReader, RootObj)) // 通过JsonReader读取RootObj
  41. {
  42. FString Topic = RootObj->GetStringField("Topic"); // Topic
  43. UE_LOG(LogTemp, Warning, TEXT("%s Topic:%s"), *FString(__FUNCTION__), *Topic);
  44. TSharedPtr<FJsonObject> ListObj = MakeShareable(new FJsonObject());
  45. ListObj = RootObj->GetObjectField("List"); // List
  46. FString Key = ListObj->GetStringField("Key"); // Key
  47. UE_LOG(LogTemp, Warning, TEXT("%s Key:%s"), *FString(__FUNCTION__), *Key);
  48. float Value = ListObj->GetNumberField("Value"); // Value
  49. GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Cyan, FString::Printf(TEXT("Value %d"), Value), true);
  50. }
  51. }
  52. void UPTNetworkSubsystem::OnClosedCallback(int32 Code, const FString& Reason, bool bWasClean)
  53. {
  54. UE_LOG(LogTemp, Warning, TEXT("连接关闭,Code:%d,reason:%s"), Code, *Reason);
  55. }
  56. void UPTNetworkSubsystem::ConnectToServer(const FString URL)
  57. {
  58. //创建Websocket对象
  59. Socket = FWebSocketsModule::Get().CreateWebSocket(URL);
  60. // Bind Events
  61. // Socket->OnConnectionError().AddLambda([](const FString& Error)->
  62. // void{UE_LOG(LogTemp,Warning,TEXT("%s"),*Error)}); // Lambda绑定方式
  63. //绑定连接成功回调
  64. Socket->OnConnected().AddUObject(this, &UPTNetworkSubsystem::OnConnectedCallback);
  65. //绑定连接失败回调
  66. Socket->OnConnectionError().AddUObject(this, &UPTNetworkSubsystem::OnConnectionErrorCallback);
  67. //绑定连接关闭回调
  68. Socket->OnClosed().AddUObject(this, &UPTNetworkSubsystem::OnClosedCallback);
  69. //绑定收到消息回调
  70. Socket->OnMessage().AddUObject(this, &UPTNetworkSubsystem::OnReceivedMessageCallback);
  71. Socket->Connect();
  72. //UAsyncHttpObject::AsyncHttpDownload("https://t7.baidu.com/it/u=2621658848,3952322712&fm=193&f=GIF", FPaths::ProjectContentDir() + "Paks", "4");
  73. }
  74. void UPTNetworkSubsystem::SendMessage(const FString Message)
  75. {
  76. if (Socket.IsValid())
  77. {
  78. Socket->Send(Message);
  79. }
  80. }
  81. void UPTNetworkSubsystem::Disconnect()
  82. {
  83. if (Socket.IsValid())
  84. {
  85. UE_LOG(LogTemp, Warning, TEXT("手动关闭"));
  86. Socket->Close(1000, "手动关闭");
  87. }
  88. }

Websoket 地址前缀只能是ws/wss/wss+insecure

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/842042
推荐阅读
相关标签
  

闽ICP备14008679号