Files
Mujoco_WASM/python/mujoco/experimental/netimgui/google/network_status.h
T
Matija Kecman ca5337161d Export netimgui files in MuJoCo Copybara configuration for use with the upcoming Web Viewer
PiperOrigin-RevId: 954769526
Change-Id: I4cdee083082f7d55c2babd5e664ec0283a2aaf63
2026-07-27 12:33:41 -07:00

76 lines
2.5 KiB
C++

// Copyright 2026 DeepMind Technologies Limited
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Connection-state query for the WASM WebSocket network backend.
//
// Stock NetImgui has no such query and does not need one: its Connect()
// implementations block until the connection is established, so a non-null
// SocketInfo is always usable and later failures surface as DataSend /
// DataReceive errors inside the client thread. In the browser,
// emscripten_websocket_new() returns a socket handle immediately while the
// connection completes (or fails) asynchronously, and no client state
// machine is watching it. Callers poll this state to hold back traffic
// until the socket is actually open and to detect closure for reconnecting.
#ifndef THIRD_PARTY_NETIMGUI_GOOGLE_NETWORK_STATUS_H_
#define THIRD_PARTY_NETIMGUI_GOOGLE_NETWORK_STATUS_H_
namespace NetImgui {
namespace Internal {
namespace Network {
struct SocketInfo;
enum class ReadyState {
kDisconnected, // Null socket.
kConnecting,
kOpen,
kClosing,
kClosed,
kError,
};
// Implemented in NetImgui_NetworkWASM.cpp (Emscripten builds only).
ReadyState GetReadyState(SocketInfo* client_socket);
// The WebSocket close code once the socket has closed, else 0. Lets callers
// distinguish a deliberate server-side rejection (e.g. 4001 = driver slot
// taken) from an ordinary drop. Implemented in NetImgui_NetworkWASM.cpp.
int GetCloseCode(SocketInfo* client_socket);
// Human-readable state name, for status overlays and logs.
inline const char* ReadyStateName(ReadyState state) {
switch (state) {
case ReadyState::kDisconnected:
return "Disconnected";
case ReadyState::kConnecting:
return "Connecting";
case ReadyState::kOpen:
return "Open";
case ReadyState::kClosing:
return "Closing";
case ReadyState::kClosed:
return "Closed";
case ReadyState::kError:
return "Error";
}
return "Unknown";
}
} // namespace Network
} // namespace Internal
} // namespace NetImgui
#endif // THIRD_PARTY_NETIMGUI_GOOGLE_NETWORK_STATUS_H_