0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unreal Enigne5.3のWebsocketsライブラリを使うとURL末尾に"/"が追加されて困った

Posted at

解決方法

応急処置的だが、
UnrealEngine\Engine\Source\Runtime\Online\WebSockets\Private\Lws\LwsWebSocket.cpp
ConnectInternal内の該当箇所(722行付近)を以下のように置き換えることで解決できる。

	/*
	int32 UrlPathLength = FCStringAnsi::Strlen(TmpUrlPath) + 2;
	TArray<ANSICHAR> UrlPath;
	UrlPath.Reserve(UrlPathLength);
	UrlPath.Add('/');
	UrlPath.Append(TmpUrlPath, UrlPathLength - 2);
	UrlPath.Add('\0');
	*/

	TArray<ANSICHAR> UrlPath;

	// Check if TmpUrlPath starts with '/'
	if (TmpUrlPath[0] != '/') {
		int32 UrlPathLength = FCStringAnsi::Strlen(TmpUrlPath) + 2; // Extra space for adding '/' at the beginning
		UrlPath.Reserve(UrlPathLength);
		UrlPath.Add('/'); // Add '/' at the beginning if it doesn't start with '/'
		UrlPath.Append(TmpUrlPath, UrlPathLength - 2); // Append the existing path
		UrlPath.Add('\0'); // Null-terminate
	}
	else {
		// If TmpUrlPath already starts with '/', use it as is
		int32 UrlPathLength = FCStringAnsi::Strlen(TmpUrlPath) + 1;
		UrlPath.Reserve(UrlPathLength);
		UrlPath.Append(TmpUrlPath, UrlPathLength - 1); // Append the path
		UrlPath.Add('\0'); // Null-terminate
	}

困ったタイミング

ROS2のRosbridge_suiteを使ってUnreal EngineとROS2をWebsocket通信で接続しようとした際に、ROSBridgeが[rosbridge_websocket-1] WARNING:tornado.access:404 GET //と怒ってきて困ってしまった。

原因

lws_parse_uri()が、ws://localhostのようにエンドポイントを指定しないURIに、/を加え、ws://localhost/とするようになっているにも関わらず、ConnectInternal内で/が加えられており、URLがws://localhost//のようになっている。
もう少し詳細には、エンドポイントを指定しない場合にエンドポイント名を/とする処理をしている。

解決法の解説

末尾がすでに/になっているときは、/を加えないようにすることで応急処置した。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?