ca5337161d
PiperOrigin-RevId: 954769526 Change-Id: I4cdee083082f7d55c2babd5e664ec0283a2aaf63
76 lines
2.5 KiB
C++
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_
|