| 1114 | class Module_HV : public Module { |
| 1115 | public: |
| 1116 | Module_HV() : Module("dashv") { |
| 1117 | // libhv defaults to file_logger (bin/libhv.YYYYMMDD.log). Invisible |
| 1118 | // under popen + CI runners. Two env-gated opt-outs: |
| 1119 | // DASLIVE_HV_LOG=stderr (or =1) → redirect libhv to stderr |
| 1120 | // DASLIVE_HV_LOG=stdout → redirect libhv to stdout |
| 1121 | // DASLIVE_HV_LOG=silent → disable libhv logging entirely |
| 1122 | // DASLIVE_HV_LOG_LEVEL=DEBUG/INFO/WARN/ERROR overrides the level. |
| 1123 | // Default unset → file_logger (unchanged). |
| 1124 | if (const char * route = std::getenv("DASLIVE_HV_LOG")) { |
| 1125 | if (!strcmp(route, "stderr") || !strcmp(route, "1")) { |
| 1126 | hlog_set_handler(stderr_logger); |
| 1127 | } else if (!strcmp(route, "stdout")) { |
| 1128 | hlog_set_handler(stdout_logger); |
| 1129 | } else if (!strcmp(route, "silent")) { |
| 1130 | hlog_disable(); |
| 1131 | } |
| 1132 | } |
| 1133 | if (const char * lvl = std::getenv("DASLIVE_HV_LOG_LEVEL")) { |
| 1134 | hlog_set_level_by_str(lvl); |
| 1135 | } |
| 1136 | |
| 1137 | ModuleLibrary lib; |
| 1138 | lib.addModule(this); |
| 1139 | lib.addBuiltInModule(); |
| 1140 | lib.addModule(Module::require("rtti_core")); |
| 1141 | addEnumeration(new Enumeration_ws_opcode()); |
| 1142 | addEnumeration(new Enumeration_ws_session_type()); |
| 1143 | addEnumeration(new Enumeration_http_method()); |
| 1144 | addEnumeration(new Enumeration_http_status()); |
| 1145 | // client — handle-backed |
| 1146 | addHandleAnnotation<hv::WebSocketClient>(this, lib, "WebSocketClient", |
| 1147 | "destroy_web_socket_client", "das::Handle<hv::WebSocketClient>"); |
| 1148 | addExtern<DAS_BIND_FUN(makeWebSocketClient)> (*this, lib, "make_web_socket_client", |
| 1149 | SideEffects::worstDefault, "makeWebSocketClient") |
| 1150 | ->args({"class","info","context"}); |
| 1151 | addExtern<DAS_BIND_FUN(das_wsc_open)> (*this, lib, "open", |
| 1152 | SideEffects::worstDefault, "das_wsc_open") |
| 1153 | ->args({"self","url"}); |
| 1154 | addExtern<DAS_BIND_FUN(das_wsc_send)> (*this, lib, "send", |
| 1155 | SideEffects::worstDefault, "das_wsc_send") |
| 1156 | ->args({"self","msg"}); |
| 1157 | addExtern<DAS_BIND_FUN(das_wsc_send_buf)> (*this, lib, "send", |
| 1158 | SideEffects::worstDefault, "das_wsc_send_buf") |
| 1159 | ->args({"self","msg","len","opcode"}); |
| 1160 | addExtern<DAS_BIND_FUN(das_wsc_close)>(*this, lib, "close", |
| 1161 | SideEffects::worstDefault, "das_wsc_close") |
| 1162 | ->args({"self"}); |
| 1163 | addExtern<DAS_BIND_FUN(das_wsc_is_connected)>(*this, lib, "is_connected", |
| 1164 | SideEffects::worstDefault,"das_wsc_is_connected") |
| 1165 | ->args({"self"}); |
| 1166 | addExtern<DAS_BIND_FUN(das_wsc_tick)>(*this, lib, "tick", |
| 1167 | SideEffects::worstDefault,"das_wsc_tick") |
| 1168 | ->args({"self"}); |
| 1169 | // server — handle-backed |
| 1170 | addHandleAnnotation<hv::WebSocketServer>(this, lib, "WebSocketServer", |
| 1171 | "destroy_web_socket_server", "das::Handle<hv::WebSocketServer>"); |
| 1172 | addHandleAnnotation<hv::WebSocketChannel>(this, lib, "WebSocketChannel", |
| 1173 | "", "das::Handle<hv::WebSocketChannel>"); |
nothing calls this directly
no test coverage detected