react-native-nitro-net 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -0
- package/android/CMakeLists.txt +29 -0
- package/android/OnLoad.cpp +6 -0
- package/android/build.gradle +72 -0
- package/android/gradle.properties +6 -0
- package/android/libs/arm64-v8a/librust_c_net.so +0 -0
- package/android/libs/armeabi-v7a/librust_c_net.so +0 -0
- package/android/libs/x86/librust_c_net.so +0 -0
- package/android/libs/x86_64/librust_c_net.so +0 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/java/com/margelo/nitro/net/NitroNetPackage.java +32 -0
- package/cpp/HybridNetDriver.cpp +5 -0
- package/cpp/HybridNetDriver.hpp +42 -0
- package/cpp/HybridNetServerDriver.cpp +5 -0
- package/cpp/HybridNetServerDriver.hpp +114 -0
- package/cpp/HybridNetSocketDriver.cpp +6 -0
- package/cpp/HybridNetSocketDriver.hpp +132 -0
- package/cpp/NetBindings.hpp +68 -0
- package/cpp/NetManager.hpp +160 -0
- package/ios/Frameworks/RustCNet.xcframework/Info.plist +44 -0
- package/ios/Frameworks/RustCNet.xcframework/ios-arm64/RustCNet.framework/Info.plist +20 -0
- package/ios/Frameworks/RustCNet.xcframework/ios-arm64/RustCNet.framework/RustCNet +0 -0
- package/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/Info.plist +20 -0
- package/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/RustCNet +0 -0
- package/lib/Driver.d.ts +2 -0
- package/lib/Driver.js +5 -0
- package/lib/Net.nitro.d.ts +85 -0
- package/lib/Net.nitro.js +21 -0
- package/lib/index.d.ts +162 -0
- package/lib/index.js +781 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/RustCNet+autolinking.cmake +86 -0
- package/nitrogen/generated/android/RustCNet+autolinking.gradle +27 -0
- package/nitrogen/generated/android/RustCNetOnLoad.cpp +51 -0
- package/nitrogen/generated/android/RustCNetOnLoad.hpp +25 -0
- package/nitrogen/generated/android/c++/JFunc_void_double_std__shared_ptr_ArrayBuffer_.hpp +77 -0
- package/nitrogen/generated/android/c++/JHybridNetDriverSpec.cpp +74 -0
- package/nitrogen/generated/android/c++/JHybridNetDriverSpec.hpp +67 -0
- package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.cpp +99 -0
- package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.hpp +72 -0
- package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.cpp +127 -0
- package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.hpp +79 -0
- package/nitrogen/generated/android/c++/JNetConfig.hpp +57 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/Func_void_double_std__shared_ptr_ArrayBuffer_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetDriverSpec.kt +65 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetServerDriverSpec.kt +92 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetSocketDriverSpec.kt +122 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/NetConfig.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/RustCNetOnLoad.kt +35 -0
- package/nitrogen/generated/ios/RustCNet+autolinking.rb +60 -0
- package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.cpp +75 -0
- package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.hpp +186 -0
- package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Umbrella.hpp +60 -0
- package/nitrogen/generated/ios/RustCNetAutolinking.mm +35 -0
- package/nitrogen/generated/ios/RustCNetAutolinking.swift +12 -0
- package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.hpp +100 -0
- package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.hpp +117 -0
- package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.hpp +163 -0
- package/nitrogen/generated/ios/swift/Func_void_double_std__shared_ptr_ArrayBuffer_.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridNetDriverSpec.swift +58 -0
- package/nitrogen/generated/ios/swift/HybridNetDriverSpec_cxx.swift +167 -0
- package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec.swift +61 -0
- package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec_cxx.swift +217 -0
- package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec.swift +69 -0
- package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec_cxx.swift +288 -0
- package/nitrogen/generated/ios/swift/NetConfig.swift +36 -0
- package/nitrogen/generated/shared/c++/HybridNetDriverSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridNetDriverSpec.hpp +74 -0
- package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.hpp +72 -0
- package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.cpp +36 -0
- package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.hpp +78 -0
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.hpp +74 -0
- package/nitrogen/generated/shared/c++/NetConfig.hpp +83 -0
- package/package.json +59 -0
- package/react-native-nitro-net.podspec +47 -0
- package/src/Driver.ts +4 -0
- package/src/Net.nitro.ts +85 -0
- package/src/index.ts +870 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "NetBindings.hpp"
|
|
4
|
+
#include <functional>
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <shared_mutex>
|
|
7
|
+
#include <string>
|
|
8
|
+
#include <unordered_map>
|
|
9
|
+
#include <vector>
|
|
10
|
+
|
|
11
|
+
#define NM_TAG "NetManager"
|
|
12
|
+
|
|
13
|
+
#ifdef __ANDROID__
|
|
14
|
+
#include <android/log.h>
|
|
15
|
+
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, NM_TAG, __VA_ARGS__)
|
|
16
|
+
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, NM_TAG, __VA_ARGS__)
|
|
17
|
+
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, NM_TAG, __VA_ARGS__)
|
|
18
|
+
#else
|
|
19
|
+
#include <cstdio>
|
|
20
|
+
#define LOGI(...) \
|
|
21
|
+
printf("[" NM_TAG "] " __VA_ARGS__); \
|
|
22
|
+
printf("\n")
|
|
23
|
+
#define LOGW(...) \
|
|
24
|
+
printf("[" NM_TAG "] WARN: " __VA_ARGS__); \
|
|
25
|
+
printf("\n")
|
|
26
|
+
#define LOGE(...) \
|
|
27
|
+
printf("[" NM_TAG "] ERROR: " __VA_ARGS__); \
|
|
28
|
+
printf("\n")
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
namespace margelo::nitro::net {
|
|
32
|
+
|
|
33
|
+
class NetManager {
|
|
34
|
+
public:
|
|
35
|
+
using EventHandler =
|
|
36
|
+
std::function<void(int eventType, const uint8_t *data, size_t len)>;
|
|
37
|
+
|
|
38
|
+
static NetManager &shared() {
|
|
39
|
+
static NetManager instance;
|
|
40
|
+
return instance;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
NetManager() {
|
|
44
|
+
LOGI("Initializing NetManager with default config...");
|
|
45
|
+
initializeRuntime(0); // 0 = use default (CPU core count)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// Initialize with custom worker thread count
|
|
49
|
+
/// Must be called before any other operations, or the config will be ignored
|
|
50
|
+
void initWithConfig(uint32_t workerThreads) {
|
|
51
|
+
if (!_initialized) {
|
|
52
|
+
LOGI("Initializing NetManager with %u worker threads...", workerThreads);
|
|
53
|
+
initializeRuntime(workerThreads);
|
|
54
|
+
} else {
|
|
55
|
+
LOGW("NetManager already initialized, config ignored. Call "
|
|
56
|
+
"initWithConfig before any socket/server operations.");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private:
|
|
61
|
+
void initializeRuntime(uint32_t workerThreads) {
|
|
62
|
+
if (_initialized)
|
|
63
|
+
return;
|
|
64
|
+
_initialized = true;
|
|
65
|
+
|
|
66
|
+
if (workerThreads > 0) {
|
|
67
|
+
net_init_with_config(
|
|
68
|
+
[](uint32_t id, int event_type, const uint8_t *data, size_t len,
|
|
69
|
+
void *context) {
|
|
70
|
+
auto mgr = static_cast<NetManager *>(context);
|
|
71
|
+
mgr->dispatch(id, event_type, data, len);
|
|
72
|
+
},
|
|
73
|
+
this, workerThreads);
|
|
74
|
+
} else {
|
|
75
|
+
net_init(
|
|
76
|
+
[](uint32_t id, int event_type, const uint8_t *data, size_t len,
|
|
77
|
+
void *context) {
|
|
78
|
+
auto mgr = static_cast<NetManager *>(context);
|
|
79
|
+
mgr->dispatch(id, event_type, data, len);
|
|
80
|
+
},
|
|
81
|
+
this);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
bool _initialized = false;
|
|
86
|
+
|
|
87
|
+
public:
|
|
88
|
+
void registerHandler(uint32_t id, EventHandler handler) {
|
|
89
|
+
LOGI("Registering handler for ID %u", id);
|
|
90
|
+
std::unique_lock lock(_mutex);
|
|
91
|
+
_handlers[id] = handler;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
void unregisterHandler(uint32_t id) {
|
|
95
|
+
LOGI("Unregistering handler for ID %u", id);
|
|
96
|
+
std::unique_lock lock(_mutex);
|
|
97
|
+
_handlers.erase(id);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private:
|
|
101
|
+
void dispatch(uint32_t id, int eventType, const uint8_t *data, size_t len) {
|
|
102
|
+
// Log all events for debugging
|
|
103
|
+
const char *eventName = "UNKNOWN";
|
|
104
|
+
switch (eventType) {
|
|
105
|
+
case 1:
|
|
106
|
+
eventName = "CONNECT";
|
|
107
|
+
break;
|
|
108
|
+
case 2:
|
|
109
|
+
eventName = "DATA";
|
|
110
|
+
break;
|
|
111
|
+
case 3:
|
|
112
|
+
eventName = "ERROR";
|
|
113
|
+
break;
|
|
114
|
+
case 4:
|
|
115
|
+
eventName = "CLOSE";
|
|
116
|
+
break;
|
|
117
|
+
case 5:
|
|
118
|
+
eventName = "DRAIN";
|
|
119
|
+
break;
|
|
120
|
+
case 6:
|
|
121
|
+
eventName = "CONNECTION";
|
|
122
|
+
break;
|
|
123
|
+
case 7:
|
|
124
|
+
eventName = "TIMEOUT";
|
|
125
|
+
break;
|
|
126
|
+
case 8:
|
|
127
|
+
eventName = "LOOKUP";
|
|
128
|
+
break;
|
|
129
|
+
case 9:
|
|
130
|
+
eventName = "DEBUG";
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
LOGI("dispatch: id=%u, event=%s(%d), len=%zu", id, eventName, eventType,
|
|
135
|
+
len);
|
|
136
|
+
|
|
137
|
+
// Copy handler outside of lock to avoid deadlock
|
|
138
|
+
// (handler may call unregisterHandler which needs unique_lock)
|
|
139
|
+
EventHandler handler;
|
|
140
|
+
{
|
|
141
|
+
std::shared_lock lock(_mutex);
|
|
142
|
+
auto it = _handlers.find(id);
|
|
143
|
+
if (it != _handlers.end()) {
|
|
144
|
+
handler = it->second;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Call handler outside of lock
|
|
149
|
+
if (handler) {
|
|
150
|
+
handler(eventType, data, len);
|
|
151
|
+
} else {
|
|
152
|
+
LOGW("No handler found for id=%u, event=%s", id, eventName);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
std::shared_mutex _mutex;
|
|
157
|
+
std::unordered_map<uint32_t, EventHandler> _handlers;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
} // namespace margelo::nitro::net
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>AvailableLibraries</key>
|
|
6
|
+
<array>
|
|
7
|
+
<dict>
|
|
8
|
+
<key>BinaryPath</key>
|
|
9
|
+
<string>RustCNet.framework/RustCNet</string>
|
|
10
|
+
<key>LibraryIdentifier</key>
|
|
11
|
+
<string>ios-arm64_x86_64-simulator</string>
|
|
12
|
+
<key>LibraryPath</key>
|
|
13
|
+
<string>RustCNet.framework</string>
|
|
14
|
+
<key>SupportedArchitectures</key>
|
|
15
|
+
<array>
|
|
16
|
+
<string>arm64</string>
|
|
17
|
+
<string>x86_64</string>
|
|
18
|
+
</array>
|
|
19
|
+
<key>SupportedPlatform</key>
|
|
20
|
+
<string>ios</string>
|
|
21
|
+
<key>SupportedPlatformVariant</key>
|
|
22
|
+
<string>simulator</string>
|
|
23
|
+
</dict>
|
|
24
|
+
<dict>
|
|
25
|
+
<key>BinaryPath</key>
|
|
26
|
+
<string>RustCNet.framework/RustCNet</string>
|
|
27
|
+
<key>LibraryIdentifier</key>
|
|
28
|
+
<string>ios-arm64</string>
|
|
29
|
+
<key>LibraryPath</key>
|
|
30
|
+
<string>RustCNet.framework</string>
|
|
31
|
+
<key>SupportedArchitectures</key>
|
|
32
|
+
<array>
|
|
33
|
+
<string>arm64</string>
|
|
34
|
+
</array>
|
|
35
|
+
<key>SupportedPlatform</key>
|
|
36
|
+
<string>ios</string>
|
|
37
|
+
</dict>
|
|
38
|
+
</array>
|
|
39
|
+
<key>CFBundlePackageType</key>
|
|
40
|
+
<string>XFWK</string>
|
|
41
|
+
<key>XCFrameworkFormatVersion</key>
|
|
42
|
+
<string>1.0</string>
|
|
43
|
+
</dict>
|
|
44
|
+
</plist>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>CFBundleExecutable</key>
|
|
6
|
+
<string>RustCNet</string>
|
|
7
|
+
<key>CFBundleIdentifier</key>
|
|
8
|
+
<string>com.iwater.RustCNet</string>
|
|
9
|
+
<key>CFBundleName</key>
|
|
10
|
+
<string>RustCNet</string>
|
|
11
|
+
<key>CFBundlePackageType</key>
|
|
12
|
+
<string>FMWK</string>
|
|
13
|
+
<key>CFBundleVersion</key>
|
|
14
|
+
<string>1.0</string>
|
|
15
|
+
<key>CFBundleShortVersionString</key>
|
|
16
|
+
<string>1.0</string>
|
|
17
|
+
<key>MinimumOSVersion</key>
|
|
18
|
+
<string>13.0</string>
|
|
19
|
+
</dict>
|
|
20
|
+
</plist>
|
package/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/Info.plist
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>CFBundleExecutable</key>
|
|
6
|
+
<string>RustCNet</string>
|
|
7
|
+
<key>CFBundleIdentifier</key>
|
|
8
|
+
<string>com.iwater.RustCNet</string>
|
|
9
|
+
<key>CFBundleName</key>
|
|
10
|
+
<string>RustCNet</string>
|
|
11
|
+
<key>CFBundlePackageType</key>
|
|
12
|
+
<string>FMWK</string>
|
|
13
|
+
<key>CFBundleVersion</key>
|
|
14
|
+
<string>1.0</string>
|
|
15
|
+
<key>CFBundleShortVersionString</key>
|
|
16
|
+
<string>1.0</string>
|
|
17
|
+
<key>MinimumOSVersion</key>
|
|
18
|
+
<string>13.0</string>
|
|
19
|
+
</dict>
|
|
20
|
+
</plist>
|
package/ios/Frameworks/RustCNet.xcframework/ios-arm64_x86_64-simulator/RustCNet.framework/RustCNet
ADDED
|
Binary file
|
package/lib/Driver.d.ts
ADDED
package/lib/Driver.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Driver = void 0;
|
|
4
|
+
const react_native_nitro_modules_1 = require("react-native-nitro-modules");
|
|
5
|
+
exports.Driver = react_native_nitro_modules_1.NitroModules.createHybridObject('NetDriver');
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { type HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export type NetEventType = 'connect' | 'data' | 'error' | 'close' | 'connection';
|
|
3
|
+
export interface NetEvent {
|
|
4
|
+
type: NetEventType;
|
|
5
|
+
data?: ArrayBuffer;
|
|
6
|
+
error?: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
}
|
|
9
|
+
export type NetEventHandler = (event: NetEvent) => void;
|
|
10
|
+
export declare enum NetSocketEvent {
|
|
11
|
+
CONNECT = 1,
|
|
12
|
+
DATA = 2,
|
|
13
|
+
ERROR = 3,
|
|
14
|
+
CLOSE = 4,
|
|
15
|
+
DRAIN = 5,
|
|
16
|
+
TIMEOUT = 7,
|
|
17
|
+
LOOKUP = 8,
|
|
18
|
+
DEBUG = 9
|
|
19
|
+
}
|
|
20
|
+
export interface NetSocketDriver extends HybridObject<{
|
|
21
|
+
ios: 'swift';
|
|
22
|
+
android: 'kotlin';
|
|
23
|
+
}> {
|
|
24
|
+
readonly id: number;
|
|
25
|
+
connect(host: string, port: number): void;
|
|
26
|
+
connectUnix(path: string): void;
|
|
27
|
+
write(data: ArrayBuffer): void;
|
|
28
|
+
pause(): void;
|
|
29
|
+
resume(): void;
|
|
30
|
+
shutdown(): void;
|
|
31
|
+
setTimeout(timeout: number): void;
|
|
32
|
+
destroy(): void;
|
|
33
|
+
resetAndDestroy(): void;
|
|
34
|
+
setNoDelay(enable: boolean): void;
|
|
35
|
+
setKeepAlive(enable: boolean, delay: number): void;
|
|
36
|
+
getLocalAddress(): string;
|
|
37
|
+
getRemoteAddress(): string;
|
|
38
|
+
onEvent: (event: number, data: ArrayBuffer) => void;
|
|
39
|
+
}
|
|
40
|
+
export declare enum NetServerEvent {
|
|
41
|
+
CONNECTION = 6,
|
|
42
|
+
ERROR = 3,
|
|
43
|
+
CLOSE = 4,
|
|
44
|
+
DEBUG = 9
|
|
45
|
+
}
|
|
46
|
+
export interface NetServerDriver extends HybridObject<{
|
|
47
|
+
ios: 'swift';
|
|
48
|
+
android: 'kotlin';
|
|
49
|
+
}> {
|
|
50
|
+
onEvent: (event: number, data: ArrayBuffer) => void;
|
|
51
|
+
listen(port: number, backlog?: number, ipv6Only?: boolean, reusePort?: boolean): void;
|
|
52
|
+
listenUnix(path: string, backlog?: number): void;
|
|
53
|
+
/**
|
|
54
|
+
* Listen on an existing file descriptor (handle)
|
|
55
|
+
* @param fd File descriptor of an already-bound TCP listener
|
|
56
|
+
* @param backlog Listen backlog (optional, defaults to 128)
|
|
57
|
+
*/
|
|
58
|
+
listenHandle(fd: number, backlog?: number): void;
|
|
59
|
+
getLocalAddress(): string;
|
|
60
|
+
maxConnections: number;
|
|
61
|
+
close(): void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Runtime configuration for the network module
|
|
65
|
+
*/
|
|
66
|
+
export interface NetConfig {
|
|
67
|
+
/**
|
|
68
|
+
* Number of worker threads for the async runtime
|
|
69
|
+
* 0 = use CPU core count (default)
|
|
70
|
+
*/
|
|
71
|
+
workerThreads?: number;
|
|
72
|
+
}
|
|
73
|
+
export interface NetDriver extends HybridObject<{
|
|
74
|
+
ios: 'swift';
|
|
75
|
+
android: 'kotlin';
|
|
76
|
+
}> {
|
|
77
|
+
createSocket(id?: string): NetSocketDriver;
|
|
78
|
+
createServer(): NetServerDriver;
|
|
79
|
+
/**
|
|
80
|
+
* Initialize the network module with custom configuration
|
|
81
|
+
* Must be called before any other network operations
|
|
82
|
+
* @param config Configuration options
|
|
83
|
+
*/
|
|
84
|
+
initWithConfig(config: NetConfig): void;
|
|
85
|
+
}
|
package/lib/Net.nitro.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NetServerEvent = exports.NetSocketEvent = void 0;
|
|
4
|
+
var NetSocketEvent;
|
|
5
|
+
(function (NetSocketEvent) {
|
|
6
|
+
NetSocketEvent[NetSocketEvent["CONNECT"] = 1] = "CONNECT";
|
|
7
|
+
NetSocketEvent[NetSocketEvent["DATA"] = 2] = "DATA";
|
|
8
|
+
NetSocketEvent[NetSocketEvent["ERROR"] = 3] = "ERROR";
|
|
9
|
+
NetSocketEvent[NetSocketEvent["CLOSE"] = 4] = "CLOSE";
|
|
10
|
+
NetSocketEvent[NetSocketEvent["DRAIN"] = 5] = "DRAIN";
|
|
11
|
+
NetSocketEvent[NetSocketEvent["TIMEOUT"] = 7] = "TIMEOUT";
|
|
12
|
+
NetSocketEvent[NetSocketEvent["LOOKUP"] = 8] = "LOOKUP";
|
|
13
|
+
NetSocketEvent[NetSocketEvent["DEBUG"] = 9] = "DEBUG";
|
|
14
|
+
})(NetSocketEvent || (exports.NetSocketEvent = NetSocketEvent = {}));
|
|
15
|
+
var NetServerEvent;
|
|
16
|
+
(function (NetServerEvent) {
|
|
17
|
+
NetServerEvent[NetServerEvent["CONNECTION"] = 6] = "CONNECTION";
|
|
18
|
+
NetServerEvent[NetServerEvent["ERROR"] = 3] = "ERROR";
|
|
19
|
+
NetServerEvent[NetServerEvent["CLOSE"] = 4] = "CLOSE";
|
|
20
|
+
NetServerEvent[NetServerEvent["DEBUG"] = 9] = "DEBUG";
|
|
21
|
+
})(NetServerEvent || (exports.NetServerEvent = NetServerEvent = {}));
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { Duplex, DuplexOptions } from 'readable-stream';
|
|
2
|
+
import { EventEmitter } from 'eventemitter3';
|
|
3
|
+
import type { NetSocketDriver, NetConfig } from './Net.nitro';
|
|
4
|
+
declare function isIP(input: string): number;
|
|
5
|
+
declare function isIPv4(input: string): boolean;
|
|
6
|
+
declare function isIPv6(input: string): boolean;
|
|
7
|
+
declare function setVerbose(enabled: boolean): void;
|
|
8
|
+
declare function getDefaultAutoSelectFamily(): number;
|
|
9
|
+
declare function setDefaultAutoSelectFamily(family: number): void;
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the network module with custom configuration.
|
|
12
|
+
* Must be called before any socket/server operations, or the config will be ignored.
|
|
13
|
+
*
|
|
14
|
+
* @param config Configuration options
|
|
15
|
+
* @param config.workerThreads Number of worker threads (0 = use CPU core count)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { initWithConfig } from 'react-native-nitro-net';
|
|
20
|
+
*
|
|
21
|
+
* // Initialize with 4 worker threads
|
|
22
|
+
* initWithConfig({ workerThreads: 4 });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
declare function initWithConfig(config: NetConfig): void;
|
|
26
|
+
export declare class SocketAddress {
|
|
27
|
+
readonly address: string;
|
|
28
|
+
readonly family: 'ipv4' | 'ipv6';
|
|
29
|
+
readonly port: number;
|
|
30
|
+
readonly flowlabel: number;
|
|
31
|
+
constructor(options: {
|
|
32
|
+
address: string;
|
|
33
|
+
family?: 'ipv4' | 'ipv6';
|
|
34
|
+
port: number;
|
|
35
|
+
flowlabel?: number;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export declare class BlockList {
|
|
39
|
+
private _rules;
|
|
40
|
+
addAddress(address: string, family?: 'ipv4' | 'ipv6'): void;
|
|
41
|
+
addRange(start: string, end: string, family?: 'ipv4' | 'ipv6'): void;
|
|
42
|
+
addSubnet(net: string, prefix: number, family?: 'ipv4' | 'ipv6'): void;
|
|
43
|
+
check(address: string, family?: 'ipv4' | 'ipv6'): boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface SocketOptions extends DuplexOptions {
|
|
46
|
+
fd?: any;
|
|
47
|
+
allowHalfOpen?: boolean;
|
|
48
|
+
readable?: boolean;
|
|
49
|
+
writable?: boolean;
|
|
50
|
+
path?: string;
|
|
51
|
+
socketDriver?: NetSocketDriver;
|
|
52
|
+
remoteFamily?: string;
|
|
53
|
+
}
|
|
54
|
+
export declare class Socket extends Duplex {
|
|
55
|
+
private _driver;
|
|
56
|
+
connecting: boolean;
|
|
57
|
+
private _connected;
|
|
58
|
+
private _hadError;
|
|
59
|
+
remoteAddress?: string;
|
|
60
|
+
remotePort?: number;
|
|
61
|
+
remoteFamily?: string;
|
|
62
|
+
localAddress?: string;
|
|
63
|
+
localPort?: number;
|
|
64
|
+
bytesRead: number;
|
|
65
|
+
bytesWritten: number;
|
|
66
|
+
autoSelectFamilyAttemptedAddresses: string[];
|
|
67
|
+
private _autoSelectFamily;
|
|
68
|
+
get localFamily(): string;
|
|
69
|
+
get readyState(): string;
|
|
70
|
+
get pending(): boolean;
|
|
71
|
+
constructor(options?: SocketOptions);
|
|
72
|
+
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
73
|
+
private _setupEvents;
|
|
74
|
+
private _updateAddresses;
|
|
75
|
+
address(): {
|
|
76
|
+
port: number;
|
|
77
|
+
family: string;
|
|
78
|
+
address: string;
|
|
79
|
+
} | null;
|
|
80
|
+
connect(options: any, connectionListener?: () => void): this;
|
|
81
|
+
private _connect;
|
|
82
|
+
private _connectUnix;
|
|
83
|
+
end(cb?: () => void): this;
|
|
84
|
+
end(chunk: any, cb?: () => void): this;
|
|
85
|
+
end(chunk: any, encoding: string, cb?: () => void): this;
|
|
86
|
+
_write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void;
|
|
87
|
+
_read(size: number): void;
|
|
88
|
+
_final(callback: (error?: Error | null) => void): void;
|
|
89
|
+
destroy(reason?: Error): this;
|
|
90
|
+
_destroy(err: Error | null, callback: (error: Error | null) => void): void;
|
|
91
|
+
setTimeout(msecs: number, callback?: () => void): this;
|
|
92
|
+
/**
|
|
93
|
+
* Pause the reading of data. That is, 'data' events will not be emitted.
|
|
94
|
+
* Useful to throttle back an upload.
|
|
95
|
+
*/
|
|
96
|
+
pause(): this;
|
|
97
|
+
/**
|
|
98
|
+
* Resume reading after a call to pause().
|
|
99
|
+
*/
|
|
100
|
+
resume(): this;
|
|
101
|
+
/**
|
|
102
|
+
* Enable/disable the use of Nagle's algorithm.
|
|
103
|
+
*/
|
|
104
|
+
setNoDelay(noDelay?: boolean): this;
|
|
105
|
+
setKeepAlive(enable?: boolean, initialDelay?: number): this;
|
|
106
|
+
ref(): this;
|
|
107
|
+
unref(): this;
|
|
108
|
+
/**
|
|
109
|
+
* Set the encoding for the socket as a Readable Stream.
|
|
110
|
+
* Use 'utf8', 'hex', etc.
|
|
111
|
+
*/
|
|
112
|
+
setEncoding(encoding: BufferEncoding): this;
|
|
113
|
+
get timeout(): number | undefined;
|
|
114
|
+
get bufferSize(): number;
|
|
115
|
+
resetAndDestroy(): this;
|
|
116
|
+
}
|
|
117
|
+
export declare class Server extends EventEmitter {
|
|
118
|
+
private _driver;
|
|
119
|
+
private _sockets;
|
|
120
|
+
private _connections;
|
|
121
|
+
private _maxConnections;
|
|
122
|
+
private _dropMaxConnection;
|
|
123
|
+
get maxConnections(): number;
|
|
124
|
+
set maxConnections(value: number);
|
|
125
|
+
get dropMaxConnection(): boolean;
|
|
126
|
+
set dropMaxConnection(value: boolean);
|
|
127
|
+
get listening(): boolean;
|
|
128
|
+
constructor(options?: any, connectionListener?: (socket: Socket) => void);
|
|
129
|
+
ref(): this;
|
|
130
|
+
unref(): this;
|
|
131
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
132
|
+
listen(port?: any, host?: any, backlog?: any, callback?: any): this;
|
|
133
|
+
close(callback?: (err?: Error) => void): this;
|
|
134
|
+
address(): {
|
|
135
|
+
port: number;
|
|
136
|
+
family: string;
|
|
137
|
+
address: string;
|
|
138
|
+
} | null;
|
|
139
|
+
getConnections(cb: (err: Error | null, count: number) => void): void;
|
|
140
|
+
}
|
|
141
|
+
export declare function createConnection(options: any, connectionListener?: () => void): Socket;
|
|
142
|
+
export declare const connect: typeof createConnection;
|
|
143
|
+
export declare function createServer(options?: any, connectionListener?: (socket: Socket) => void): Server;
|
|
144
|
+
export { isIP, isIPv4, isIPv6, getDefaultAutoSelectFamily, setDefaultAutoSelectFamily, setVerbose, initWithConfig, };
|
|
145
|
+
export type { NetConfig };
|
|
146
|
+
declare const _default: {
|
|
147
|
+
Socket: typeof Socket;
|
|
148
|
+
Server: typeof Server;
|
|
149
|
+
SocketAddress: typeof SocketAddress;
|
|
150
|
+
BlockList: typeof BlockList;
|
|
151
|
+
createConnection: typeof createConnection;
|
|
152
|
+
createServer: typeof createServer;
|
|
153
|
+
connect: typeof createConnection;
|
|
154
|
+
isIP: typeof isIP;
|
|
155
|
+
isIPv4: typeof isIPv4;
|
|
156
|
+
isIPv6: typeof isIPv6;
|
|
157
|
+
getDefaultAutoSelectFamily: typeof getDefaultAutoSelectFamily;
|
|
158
|
+
setDefaultAutoSelectFamily: typeof setDefaultAutoSelectFamily;
|
|
159
|
+
setVerbose: typeof setVerbose;
|
|
160
|
+
initWithConfig: typeof initWithConfig;
|
|
161
|
+
};
|
|
162
|
+
export default _default;
|