diff --git a/.gitignore b/.gitignore
index 356fb7c4..fdaab994 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,3 +66,31 @@ packages/**/native-src/android/**/.classpath
packages/**/native-src/ios/**/xcuserdata/
packages/**/native-src/ios/**/project.xcworkspace/
packages/**/native-src/ios/**/build
+
+
+# src-native
+packages/**/src-native/dist
+
+# src-native
+packages/**/src-native/**/target
+
+# src-native/android
+packages/**/src-native/android/**/*.iml
+packages/**/src-native/android/**/.gradle
+packages/**/src-native/android/**/local.properties
+packages/**/src-native/android/**/.idea/workspace.xml
+packages/**/src-native/android/**/.idea/libraries
+packages/**/src-native/android/**/.DS_Store
+packages/**/src-native/android/**/build
+packages/**/src-native/android/**/bin
+packages/**/src-native/android/**/captures
+packages/**/src-native/android/**/.externalNativeBuild
+packages/**/src-native/android/**/.settings
+packages/**/src-native/android/**/.project
+packages/**/src-native/android/**/.classpath
+
+# src-native/ios
+packages/**/src-native/web-server-ios/**/xcuserdata/
+packages/**/src-native/web-server-ios/**/project.xcworkspace/
+packages/**/src-native/web-server-ios/**/build
+packages/**/src-native/web-server-ios/**/dist
diff --git a/README.md b/README.md
index e82b88b6..5c899cc5 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,7 @@
- [@nstudio/nativescript-qr](packages/nativescript-qr/README.md)
- [@nstudio/nativescript-tracking-transparency](packages/nativescript-tracking-transparency/README.md)
- [@nstudio/nativescript-walletconnect](packages/nativescript-walletconnect/README.md)
+- [@nstudio/nativescript-web-server](packages/nativescript-web-server/README.md)
# How to use?
diff --git a/apps/demo-angular/package.json b/apps/demo-angular/package.json
index c3623d7e..a7892121 100644
--- a/apps/demo-angular/package.json
+++ b/apps/demo-angular/package.json
@@ -28,7 +28,8 @@
"@nstudio/nativescript-plaid": "file:../../dist/packages/nativescript-plaid",
"@nstudio/nativescript-qr": "file:../../dist/packages/nativescript-qr",
"@nstudio/nativescript-tracking-transparency": "file:../../dist/packages/nativescript-tracking-transparency",
- "@nstudio/nativescript-walletconnect": "file:../../dist/packages/nativescript-walletconnect"
+ "@nstudio/nativescript-walletconnect": "file:../../dist/packages/nativescript-walletconnect",
+ "@nstudio/nativescript-web-server": "file:../../dist/packages/nativescript-web-server"
},
"devDependencies": {
"@nativescript/android": "~8.6.0",
diff --git a/apps/demo-angular/src/app-routing.module.ts b/apps/demo-angular/src/app-routing.module.ts
index 73c62f6b..c6bd5f41 100644
--- a/apps/demo-angular/src/app-routing.module.ts
+++ b/apps/demo-angular/src/app-routing.module.ts
@@ -32,7 +32,8 @@ const routes: Routes = [
{ path: 'nativescript-plaid', loadChildren: () => import('./plugin-demos/nativescript-plaid.module').then(m => m.NativescriptPlaidModule) },
{ path: 'nativescript-qr', loadChildren: () => import('./plugin-demos/nativescript-qr.module').then(m => m.NativescriptQrModule) },
{ path: 'nativescript-tracking-transparency', loadChildren: () => import('./plugin-demos/nativescript-tracking-transparency.module').then(m => m.NativescriptTrackingTransparencyModule) },
- { path: 'nativescript-walletconnect', loadChildren: () => import('./plugin-demos/nativescript-walletconnect.module').then(m => m.NativescriptWalletconnectModule) }
+ { path: 'nativescript-walletconnect', loadChildren: () => import('./plugin-demos/nativescript-walletconnect.module').then(m => m.NativescriptWalletconnectModule) },
+ { path: 'nativescript-web-server', loadChildren: () => import('./plugin-demos/nativescript-web-server.module').then(m => m.NativescriptWebServerModule) }
];
@NgModule({
diff --git a/apps/demo-angular/src/home.component.ts b/apps/demo-angular/src/home.component.ts
index 09216b98..0ca7b493 100644
--- a/apps/demo-angular/src/home.component.ts
+++ b/apps/demo-angular/src/home.component.ts
@@ -86,6 +86,9 @@ export class HomeComponent {
},
{
name: 'nativescript-walletconnect'
+ },
+ {
+ name: 'nativescript-web-server'
}
];
}
\ No newline at end of file
diff --git a/apps/demo-angular/src/plugin-demos/nativescript-web-server.component.html b/apps/demo-angular/src/plugin-demos/nativescript-web-server.component.html
new file mode 100644
index 00000000..2ca5de10
--- /dev/null
+++ b/apps/demo-angular/src/plugin-demos/nativescript-web-server.component.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/apps/demo-angular/src/plugin-demos/nativescript-web-server.component.ts b/apps/demo-angular/src/plugin-demos/nativescript-web-server.component.ts
new file mode 100644
index 00000000..966a8b40
--- /dev/null
+++ b/apps/demo-angular/src/plugin-demos/nativescript-web-server.component.ts
@@ -0,0 +1,19 @@
+import { Component, NgZone } from '@angular/core';
+import { DemoSharedNativescriptWebServer } from '@demo/shared';
+import { } from '@nstudio/nativescript-web-server';
+
+@Component({
+ selector: 'demo-nativescript-web-server',
+ templateUrl: 'nativescript-web-server.component.html',
+})
+export class NativescriptWebServerComponent {
+
+ demoShared: DemoSharedNativescriptWebServer;
+
+ constructor(private _ngZone: NgZone) {}
+
+ ngOnInit() {
+ this.demoShared = new DemoSharedNativescriptWebServer();
+ }
+
+}
\ No newline at end of file
diff --git a/apps/demo-angular/src/plugin-demos/nativescript-web-server.module.ts b/apps/demo-angular/src/plugin-demos/nativescript-web-server.module.ts
new file mode 100644
index 00000000..33a0df8c
--- /dev/null
+++ b/apps/demo-angular/src/plugin-demos/nativescript-web-server.module.ts
@@ -0,0 +1,10 @@
+import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
+import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
+import { NativescriptWebServerComponent } from './nativescript-web-server.component';
+
+@NgModule({
+ imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: NativescriptWebServerComponent }])],
+ declarations: [NativescriptWebServerComponent],
+ schemas: [ NO_ERRORS_SCHEMA]
+})
+export class NativescriptWebServerModule {}
diff --git a/apps/demo/package.json b/apps/demo/package.json
index 012ac0c9..2e79912f 100644
--- a/apps/demo/package.json
+++ b/apps/demo/package.json
@@ -15,8 +15,8 @@
"@nstudio/nativescript-cardview": "file:../../packages/nativescript-cardview",
"@nstudio/nativescript-carousel": "file:../../packages/nativescript-carousel",
"@nstudio/nativescript-checkbox": "file:../../packages/nativescript-checkbox",
- "@nstudio/nativescript-dynatrace": "file:../../packages/nativescript-dynatrace",
- "@nstudio/nativescript-embrace": "file:../../packages/nativescript-embrace",
+ "@nstudio/nativescript-dynatrace": "file:../../dist/packages/nativescript-dynatrace",
+ "@nstudio/nativescript-embrace": "file:../../dist/packages/nativescript-embrace",
"@nstudio/nativescript-exoplayer": "file:../../packages/nativescript-exoplayer",
"@nstudio/nativescript-fancyalert": "file:../../packages/nativescript-fancyalert",
"@nstudio/nativescript-filterable-listpicker": "file:../../packages/nativescript-filterable-listpicker",
@@ -29,7 +29,8 @@
"@nstudio/nativescript-plaid": "file:../../packages/nativescript-plaid",
"@nstudio/nativescript-qr": "file:../../packages/nativescript-qr",
"@nstudio/nativescript-tracking-transparency": "file:../../packages/nativescript-tracking-transparency",
- "@nstudio/nativescript-walletconnect": "file:../../packages/nativescript-walletconnect"
+ "@nstudio/nativescript-walletconnect": "file:../../packages/nativescript-walletconnect",
+ "@nstudio/nativescript-web-server": "file:../../packages/nativescript-web-server"
},
"devDependencies": {
"@nativescript/android": "~8.6.0",
diff --git a/apps/demo/src/main-page.xml b/apps/demo/src/main-page.xml
index 91f4d754..8c87d6da 100644
--- a/apps/demo/src/main-page.xml
+++ b/apps/demo/src/main-page.xml
@@ -32,6 +32,7 @@
+
diff --git a/apps/demo/src/plugin-demos/nativescript-web-server.ts b/apps/demo/src/plugin-demos/nativescript-web-server.ts
new file mode 100644
index 00000000..e259e087
--- /dev/null
+++ b/apps/demo/src/plugin-demos/nativescript-web-server.ts
@@ -0,0 +1,12 @@
+import { Observable, EventData, Page } from '@nativescript/core';
+import { DemoSharedNativescriptWebServer } from '@demo/shared';
+import { } from '@nstudio/nativescript-web-server';
+
+export function navigatingTo(args: EventData) {
+ const page = args.object;
+ page.bindingContext = new DemoModel();
+}
+
+export class DemoModel extends DemoSharedNativescriptWebServer {
+
+}
diff --git a/apps/demo/src/plugin-demos/nativescript-web-server.xml b/apps/demo/src/plugin-demos/nativescript-web-server.xml
new file mode 100644
index 00000000..fa665bb4
--- /dev/null
+++ b/apps/demo/src/plugin-demos/nativescript-web-server.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/demo/src/web_assets/index.html b/apps/demo/src/web_assets/index.html
new file mode 100644
index 00000000..7cd1aa49
--- /dev/null
+++ b/apps/demo/src/web_assets/index.html
@@ -0,0 +1,12 @@
+
+
+
+ Page Title
+
+
+
+This is a Heading
+This is a paragraph.
+
+
+
\ No newline at end of file
diff --git a/apps/demo/webpack.config.js b/apps/demo/webpack.config.js
index 68cf8521..e656df3a 100644
--- a/apps/demo/webpack.config.js
+++ b/apps/demo/webpack.config.js
@@ -18,5 +18,12 @@ module.exports = (env) => {
context: webpack.Utils.project.getProjectFilePath('node_modules')
});
+ webpack.Utils.addCopyRule({
+ from: '../src/web_assets',
+ to: 'web_assets',
+ context: webpack.Utils.project.getProjectFilePath('node_modules')
+ });
+
+
return webpack.resolveConfig();
};
diff --git a/packages/nativescript-web-server/.eslintrc.json b/packages/nativescript-web-server/.eslintrc.json
new file mode 100644
index 00000000..53c06c8d
--- /dev/null
+++ b/packages/nativescript-web-server/.eslintrc.json
@@ -0,0 +1,18 @@
+{
+ "extends": ["../../.eslintrc.json"],
+ "ignorePatterns": ["!**/*", "node_modules/**/*"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/nativescript-web-server/README.md b/packages/nativescript-web-server/README.md
new file mode 100644
index 00000000..b9157f84
--- /dev/null
+++ b/packages/nativescript-web-server/README.md
@@ -0,0 +1,13 @@
+# @nstudio/nativescript-web-server
+
+```javascript
+npm install @nstudio/nativescript-web-server
+```
+
+## Usage
+
+// TODO
+
+## License
+
+Apache License Version 2.0
diff --git a/packages/nativescript-web-server/common.ts b/packages/nativescript-web-server/common.ts
new file mode 100644
index 00000000..6eb9670e
--- /dev/null
+++ b/packages/nativescript-web-server/common.ts
@@ -0,0 +1,7 @@
+export enum ServerStatus {
+ Inactive,
+ Active,
+ Crashed,
+ Starting,
+ Stopping,
+}
diff --git a/packages/nativescript-web-server/index.android.ts b/packages/nativescript-web-server/index.android.ts
new file mode 100644
index 00000000..f2a05861
--- /dev/null
+++ b/packages/nativescript-web-server/index.android.ts
@@ -0,0 +1,229 @@
+import { Observable } from '@nativescript/core';
+import { ServerStatus } from './common';
+
+export class Server {
+ private server;
+ constructor(config: { logger?: boolean; path: string; directory: string; index?: string; hostName?: string; port: number; workers?: number; showFiles?: boolean }) {
+ this.server = new io.nstudio.plugins.webserver.Server(config.logger ?? false, config.path, config.directory, config.index ?? null, config.hostName ?? '127.0.0.1', config.port ?? 8080, config.workers ?? 2, config.showFiles ?? false);
+ }
+
+ get status(): ServerStatus {
+ return this.server.getStatus() as never;
+ }
+
+ setStatusChangeListener(value: (status: ServerStatus) => void) {
+ this.server.setStatusCallback(
+ new io.nstudio.plugins.webserver.Server.StatusCallback({
+ onChange(status: ServerStatus) {
+ value(status);
+ },
+ })
+ );
+ }
+
+ start() {
+ return new Promise((resolve, reject) => {
+ this.server.start(
+ new io.nstudio.plugins.webserver.Server.Callback({
+ onSuccess() {
+ resolve();
+ },
+ onError(error: string) {
+ reject(error);
+ },
+ })
+ );
+ });
+ }
+ stop(wait = false) {
+ return new Promise((resolve, reject) => {
+ this.server.stop(
+ wait,
+ new io.nstudio.plugins.webserver.Server.Callback({
+ onSuccess() {
+ resolve();
+ },
+ onError(error: string) {
+ reject(error);
+ },
+ })
+ );
+ });
+ }
+}
+
+export class Client {
+ _id: number;
+ get id(): number {
+ return this._id;
+ }
+}
+
+export class WebSocketServer extends Observable {
+ private server: io.nstudio.plugins.webserver.websocket.Server;
+ private clients: Map = new Map();
+ constructor(config: { logger: boolean; path: string; maxPayload?: number; hostName: string; port: number; workers: number; autoPong?: boolean }) {
+ super();
+ this.server = new io.nstudio.plugins.webserver.websocket.Server(config.logger ?? false, config.path, config.maxPayload ?? 1024 * 1024 * 100, config.hostName ?? '127.0.0.1', config.port ?? 8081, config.workers ?? 2, config.autoPong ?? true);
+ const ref = new WeakRef(this);
+ this.server.addOnConnect(
+ new io.nstudio.plugins.webserver.websocket.Server.ConnectCallback({
+ onConnect(id) {
+ const owner = ref.get?.();
+ if (owner) {
+ const ret = new Client();
+ ret._id = id;
+ owner.clients.set(id, ret);
+ owner.notify({ eventName: 'connection', client: ret });
+ }
+ },
+ })
+ );
+
+ const onMessage = new io.nstudio.plugins.webserver.websocket.Server.MessageCallback({
+ onMessage(id, message) {
+ const owner = ref.get?.();
+ if (owner) {
+ let ret: ArrayBuffer | string | null = null;
+ if (message.type === NSCMessageType.Text) {
+ ret = message.text;
+ } else if (message.data instanceof NSData) {
+ ret = interop.bufferFromData(message.data);
+ }
+ owner.notify({ eventName: 'message', client: owner.clients.get(id), message: ret });
+ }
+ },
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ onPing(param0, param1) {},
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ onPong(param0, param1) {},
+ });
+ this.server.addOnMessage(onMessage);
+
+ const onPing = new io.nstudio.plugins.webserver.websocket.Server.MessageCallback({
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ onMessage(id, message) {},
+ onPing(id, message) {
+ const owner = ref.get?.();
+ if (owner) {
+ let ret: ArrayBuffer | null = null;
+ if (message) {
+ ret = (ArrayBuffer).from(message);
+ }
+ owner.notify({ eventName: 'ping', client: owner.clients.get(id), message: ret });
+ }
+ },
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ onPong(param0, param1) {},
+ });
+
+ this.server.addOnPing(onPing);
+
+ const onPong = new io.nstudio.plugins.webserver.websocket.Server.MessageCallback({
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ onMessage(id, message) {},
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ onPing(param0, param1) {},
+ onPong(id, message) {
+ const owner = ref.get?.();
+ if (owner) {
+ let ret: ArrayBuffer | null = null;
+ if (message) {
+ ret = (ArrayBuffer).from(message);
+ }
+ owner.notify({ eventName: 'pong', client: this.clients.get(id), message: ret });
+ }
+ },
+ });
+
+ this.server.addOnPong(onPong);
+
+ const onDisconnect = new io.nstudio.plugins.webserver.websocket.Server.DisconnectCallback({
+ onDisconnect(id, code, description) {
+ const owner = ref.get?.();
+ if (owner) {
+ owner.notify({ eventName: 'close', client: owner.clients.get(id), code, description });
+ owner.clients.delete(id);
+ }
+ },
+ });
+
+ this.server.addOnDisconnect(onDisconnect);
+ }
+
+ get status(): ServerStatus {
+ return this.server.getStatus() as never;
+ }
+
+ broadcast(data: string | ArrayBuffer | Uint8Array | Uint8ClampedArray) {
+ if (typeof data === 'string') {
+ this.server.broadcast(data);
+ } else if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.broadcast(data as never);
+ }
+ }
+
+ send(id: number, data: string | ArrayBuffer | Uint8Array | Uint8ClampedArray) {
+ if (typeof data === 'string') {
+ this.server.send(data, id);
+ } else if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.send(data as never, id);
+ }
+ }
+
+ ping(id: number, data: ArrayBuffer | Uint8Array | Uint8ClampedArray | null = null) {
+ if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.ping(data as never, id);
+ } else {
+ this.server.ping(null, id);
+ }
+ }
+
+ pong(id: number, data: ArrayBuffer | Uint8Array | Uint8ClampedArray | null = null) {
+ if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.pong(data as never, id);
+ } else {
+ this.server.pong(null, id);
+ }
+ }
+
+ setStatusChangeListener(value: (status: ServerStatus) => void) {
+ this.server.setStatusCallback(
+ new io.nstudio.plugins.webserver.websocket.Server.StatusCallback({
+ onChange(status: ServerStatus) {
+ value(status as never);
+ },
+ })
+ );
+ }
+
+ start() {
+ return new Promise((resolve, reject) => {
+ this.server.start(
+ new io.nstudio.plugins.webserver.websocket.Server.Callback({
+ onSuccess() {
+ resolve();
+ },
+ onError(error) {
+ reject(error);
+ },
+ })
+ );
+ });
+ }
+ stop(wait = false) {
+ return new Promise((resolve, reject) => {
+ this.server.stop(
+ wait,
+ new io.nstudio.plugins.webserver.websocket.Server.Callback({
+ onSuccess() {
+ resolve();
+ },
+ onError(error) {
+ reject(error);
+ },
+ })
+ );
+ });
+ }
+}
diff --git a/packages/nativescript-web-server/index.d.ts b/packages/nativescript-web-server/index.d.ts
new file mode 100644
index 00000000..bcd32a89
--- /dev/null
+++ b/packages/nativescript-web-server/index.d.ts
@@ -0,0 +1,37 @@
+import { Observable } from '@nativescript/core';
+export class Server {
+ private server: NSCServer;
+ constructor(config: { logger?: boolean; path: string; directory: string; index?: string; hostName?: string; port?: number; workers?: number; showFiles?: boolean });
+
+ get status(): ServerStatus;
+
+ setStatusChangeListener(value: (status: ServerStatus) => void);
+
+ start(): Promise;
+
+ stop(wait?: bool): Promise;
+}
+
+export class Client {
+ readonly id: number;
+}
+
+export class WebSocketServer extends Observable {
+ constructor(config: { logger?: boolean; path: string; maxPayload?: number; hostName?: string; port?: number; workers?: number; autoPong?: boolean });
+
+ broadcast(data: string | ArrayBuffer | Uint8Array | Uint8ClampedArray);
+
+ send(id: number, data: string | ArrayBuffer | Uint8Array | Uint8ClampedArray);
+
+ ping(id: number, data?: ArrayBuffer | Uint8Array | Uint8ClampedArray);
+
+ pong(id: number, data?: ArrayBuffer | Uint8Array | Uint8ClampedArray);
+
+ readonly status: ServerStatus;
+
+ setStatusChangeListener(value: (status: ServerStatus) => void);
+
+ start(): Promise;
+
+ stop(wait?: bool): Promise;
+}
diff --git a/packages/nativescript-web-server/index.ios.ts b/packages/nativescript-web-server/index.ios.ts
new file mode 100644
index 00000000..5036fa78
--- /dev/null
+++ b/packages/nativescript-web-server/index.ios.ts
@@ -0,0 +1,155 @@
+import { ServerStatus } from './common';
+import { Observable } from '@nativescript/core';
+export class Server {
+ private server: NSCServer;
+ constructor(config: { logger: boolean; path: string; directory: string; index: string; hostName: string; port: number; workers: number; showFiles?: boolean }) {
+ this.server = NSCServer.alloc().init(config.logger ?? false, config.path, config.directory, config.index ?? null, config.hostName ?? '127.0.0.1', config.port ?? 8080, config.workers ?? 2, config.showFiles ?? false);
+ }
+
+ get status(): ServerStatus {
+ return this.server.status as never;
+ }
+
+ setStatusChangeListener(value: (status: ServerStatus) => void) {
+ this.server.setStatusChangeCallback((status) => {
+ value(status as never);
+ });
+ }
+
+ start() {
+ return new Promise((resolve, reject) => {
+ this.server.start((error: string) => {
+ if (error) {
+ reject(error);
+ } else {
+ resolve();
+ }
+ });
+ });
+ }
+ stop(wait = false) {
+ return new Promise((resolve, reject) => {
+ this.server.stop(wait, (error: string) => {
+ if (error) {
+ reject(error);
+ } else {
+ resolve();
+ }
+ });
+ });
+ }
+}
+
+export class Client {
+ _native: NSCClient;
+ get id(): number {
+ return this._native.id;
+ }
+}
+
+export class WebSocketServer extends Observable {
+ private server: NSCWebSocketServer;
+ private clients: Map = new Map();
+ constructor(config: { logger: boolean; path: string; maxPayload?: number; hostName: string; port: number; workers: number; autoPong?: boolean }) {
+ super();
+ this.server = NSCWebSocketServer.alloc().init(config.logger ?? false, config.path, config.maxPayload ?? 1024 * 1024 * 100, config.hostName ?? '127.0.0.1', config.port ?? 8081, config.workers ?? 2, config.autoPong ?? true);
+ this.server.addOnConnect((client) => {
+ const ret = new Client();
+ ret._native = client;
+ this.clients.set(client.id, ret);
+ this.notify({ eventName: 'connection', client: ret });
+ });
+ this.server.addOnMessage((client, message) => {
+ let ret: ArrayBuffer | string | null = null;
+ if (message.type === NSCMessageType.Text) {
+ ret = message.text;
+ } else if (message.data instanceof NSData) {
+ ret = interop.bufferFromData(message.data);
+ }
+ this.notify({ eventName: 'message', client: this.clients.get(client.id), message: ret });
+ });
+ this.server.addOnPing((client, message) => {
+ let ret: ArrayBuffer | null = null;
+ if (message) {
+ ret = interop.bufferFromData(message);
+ }
+ this.notify({ eventName: 'ping', client: this.clients.get(client.id), message: ret });
+ });
+ this.server.addOnPong((client, message) => {
+ let ret: ArrayBuffer | null = null;
+ if (message) {
+ ret = interop.bufferFromData(message);
+ }
+ this.notify({ eventName: 'pong', client: this.clients.get(client.id), message: ret });
+ });
+ this.server.addOnDisconnect((client, code, description) => {
+ this.notify({ eventName: 'close', client: this.clients.get(client.id), code, description });
+ this.clients.delete(client.id);
+ });
+ }
+
+ get status(): ServerStatus {
+ return this.server.status as never;
+ }
+
+ broadcast(data: string | ArrayBuffer | Uint8Array | Uint8ClampedArray) {
+ if (typeof data === 'string') {
+ this.server.broadcast(data);
+ } else if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.broadcastWithBinary(NSData.dataWithData(data as never));
+ }
+ }
+
+ send(id: number, data: string | ArrayBuffer | Uint8Array | Uint8ClampedArray) {
+ if (typeof data === 'string') {
+ this.server.sendWithTextId(data, id);
+ } else if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.sendWithBinaryId(NSData.dataWithData(data as never), id);
+ }
+ }
+
+ ping(id: number, data: ArrayBuffer | Uint8Array | Uint8ClampedArray | null = null) {
+ if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.sendWithPingId(NSData.dataWithData(data as never), id);
+ } else {
+ this.server.sendEmptyPingWithId(id);
+ }
+ }
+
+ pong(id: number, data: ArrayBuffer | Uint8Array | Uint8ClampedArray | null = null) {
+ if (data instanceof ArrayBuffer || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
+ this.server.sendWithPongId(NSData.dataWithData(data as never), id);
+ } else {
+ this.server.sendEmptyPongWithId(id);
+ }
+ }
+
+ setStatusChangeListener(value: (status: ServerStatus) => void) {
+ this.server.setStatusChangeCallback((status) => {
+ value(status as never);
+ });
+ }
+
+ start() {
+ return new Promise((resolve, reject) => {
+ this.server.start((error: string) => {
+ if (error) {
+ reject(error);
+ } else {
+ resolve();
+ }
+ });
+ });
+ }
+ stop(wait = false) {
+ return new Promise((resolve, reject) => {
+ this.server.stop(wait, (error: string) => {
+ if (error) {
+ reject(error);
+ } else {
+ resolve();
+ }
+ });
+ });
+ }
+}
diff --git a/packages/nativescript-web-server/package.json b/packages/nativescript-web-server/package.json
new file mode 100644
index 00000000..67c2f9d9
--- /dev/null
+++ b/packages/nativescript-web-server/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "@nstudio/nativescript-web-server",
+ "version": "1.0.0-alpha.4",
+ "description": "NativeScript Web Server",
+ "main": "index",
+ "typings": "index.d.ts",
+ "nativescript": {
+ "platforms": {
+ "ios": "6.0.0",
+ "android": "6.0.0"
+ }
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/nstudio/nativescript-plugins.git"
+ },
+ "keywords": [
+ "NativeScript",
+ "JavaScript",
+ "TypeScript",
+ "iOS",
+ "Android"
+ ],
+ "author": {
+ "name": "nstudio",
+ "email": "oss@nstudio.io"
+ },
+ "bugs": {
+ "url": "https://github.com/nstudio/nativescript-plugins/issues"
+ },
+ "license": "Apache-2.0",
+ "homepage": "https://github.com/nstudio/nativescript-plugins",
+ "readmeFilename": "README.md",
+ "bootstrapper": "@nativescript/plugin-seed"
+}
diff --git a/packages/nativescript-web-server/platforms/android/webserver-release.aar b/packages/nativescript-web-server/platforms/android/webserver-release.aar
new file mode 100644
index 00000000..01df4637
Binary files /dev/null and b/packages/nativescript-web-server/platforms/android/webserver-release.aar differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/Info.plist b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/Info.plist
new file mode 100644
index 00000000..2d898fb3
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/Info.plist
@@ -0,0 +1,48 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ WebServerNative.framework/WebServerNative
+ DebugSymbolsPath
+ dSYMs
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ WebServerNative.framework
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ BinaryPath
+ WebServerNative.framework/WebServerNative
+ DebugSymbolsPath
+ dSYMs
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ WebServerNative.framework
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/WebServerNative-Swift.h b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/WebServerNative-Swift.h
new file mode 100644
index 00000000..b4e7b80d
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/WebServerNative-Swift.h
@@ -0,0 +1,397 @@
+#if 0
+#elif defined(__arm64__) && __arm64__
+// Generated by Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+#ifndef WEBSERVERNATIVE_SWIFT_H
+#define WEBSERVERNATIVE_SWIFT_H
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wgcc-compat"
+
+#if !defined(__has_include)
+# define __has_include(x) 0
+#endif
+#if !defined(__has_attribute)
+# define __has_attribute(x) 0
+#endif
+#if !defined(__has_feature)
+# define __has_feature(x) 0
+#endif
+#if !defined(__has_warning)
+# define __has_warning(x) 0
+#endif
+
+#if __has_include()
+# include
+#endif
+
+#pragma clang diagnostic ignored "-Wauto-import"
+#if defined(__OBJC__)
+#include
+#endif
+#if defined(__cplusplus)
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#else
+#include
+#include
+#include
+#include
+#endif
+#if defined(__cplusplus)
+#if defined(__arm64e__) && __has_include()
+# include
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
+# ifndef __ptrauth_swift_value_witness_function_pointer
+# define __ptrauth_swift_value_witness_function_pointer(x)
+# endif
+# ifndef __ptrauth_swift_class_method_pointer
+# define __ptrauth_swift_class_method_pointer(x)
+# endif
+#pragma clang diagnostic pop
+#endif
+#endif
+
+#if !defined(SWIFT_TYPEDEFS)
+# define SWIFT_TYPEDEFS 1
+# if __has_include()
+# include
+# elif !defined(__cplusplus)
+typedef uint_least16_t char16_t;
+typedef uint_least32_t char32_t;
+# endif
+typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
+typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
+typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
+typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
+typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
+typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
+typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
+typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
+typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
+typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
+typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
+typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
+#endif
+
+#if !defined(SWIFT_PASTE)
+# define SWIFT_PASTE_HELPER(x, y) x##y
+# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
+#endif
+#if !defined(SWIFT_METATYPE)
+# define SWIFT_METATYPE(X) Class
+#endif
+#if !defined(SWIFT_CLASS_PROPERTY)
+# if __has_feature(objc_class_property)
+# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
+# else
+# define SWIFT_CLASS_PROPERTY(...)
+# endif
+#endif
+#if !defined(SWIFT_RUNTIME_NAME)
+# if __has_attribute(objc_runtime_name)
+# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
+# else
+# define SWIFT_RUNTIME_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_COMPILE_NAME)
+# if __has_attribute(swift_name)
+# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
+# else
+# define SWIFT_COMPILE_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_METHOD_FAMILY)
+# if __has_attribute(objc_method_family)
+# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
+# else
+# define SWIFT_METHOD_FAMILY(X)
+# endif
+#endif
+#if !defined(SWIFT_NOESCAPE)
+# if __has_attribute(noescape)
+# define SWIFT_NOESCAPE __attribute__((noescape))
+# else
+# define SWIFT_NOESCAPE
+# endif
+#endif
+#if !defined(SWIFT_RELEASES_ARGUMENT)
+# if __has_attribute(ns_consumed)
+# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
+# else
+# define SWIFT_RELEASES_ARGUMENT
+# endif
+#endif
+#if !defined(SWIFT_WARN_UNUSED_RESULT)
+# if __has_attribute(warn_unused_result)
+# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+# else
+# define SWIFT_WARN_UNUSED_RESULT
+# endif
+#endif
+#if !defined(SWIFT_NORETURN)
+# if __has_attribute(noreturn)
+# define SWIFT_NORETURN __attribute__((noreturn))
+# else
+# define SWIFT_NORETURN
+# endif
+#endif
+#if !defined(SWIFT_CLASS_EXTRA)
+# define SWIFT_CLASS_EXTRA
+#endif
+#if !defined(SWIFT_PROTOCOL_EXTRA)
+# define SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_ENUM_EXTRA)
+# define SWIFT_ENUM_EXTRA
+#endif
+#if !defined(SWIFT_CLASS)
+# if __has_attribute(objc_subclassing_restricted)
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# else
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# endif
+#endif
+#if !defined(SWIFT_RESILIENT_CLASS)
+# if __has_attribute(objc_class_stub)
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# else
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# endif
+#endif
+#if !defined(SWIFT_PROTOCOL)
+# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_EXTENSION)
+# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
+#endif
+#if !defined(OBJC_DESIGNATED_INITIALIZER)
+# if __has_attribute(objc_designated_initializer)
+# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+# else
+# define OBJC_DESIGNATED_INITIALIZER
+# endif
+#endif
+#if !defined(SWIFT_ENUM_ATTR)
+# if __has_attribute(enum_extensibility)
+# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
+# else
+# define SWIFT_ENUM_ATTR(_extensibility)
+# endif
+#endif
+#if !defined(SWIFT_ENUM)
+# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# if __has_feature(generalized_swift_name)
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# else
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
+# endif
+#endif
+#if !defined(SWIFT_UNAVAILABLE)
+# define SWIFT_UNAVAILABLE __attribute__((unavailable))
+#endif
+#if !defined(SWIFT_UNAVAILABLE_MSG)
+# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
+#endif
+#if !defined(SWIFT_AVAILABILITY)
+# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
+#endif
+#if !defined(SWIFT_WEAK_IMPORT)
+# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
+#endif
+#if !defined(SWIFT_DEPRECATED)
+# define SWIFT_DEPRECATED __attribute__((deprecated))
+#endif
+#if !defined(SWIFT_DEPRECATED_MSG)
+# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
+#endif
+#if !defined(SWIFT_DEPRECATED_OBJC)
+# if __has_feature(attribute_diagnose_if_objc)
+# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
+# else
+# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
+# endif
+#endif
+#if defined(__OBJC__)
+#if !defined(IBSegueAction)
+# define IBSegueAction
+#endif
+#endif
+#if !defined(SWIFT_EXTERN)
+# if defined(__cplusplus)
+# define SWIFT_EXTERN extern "C"
+# else
+# define SWIFT_EXTERN extern
+# endif
+#endif
+#if !defined(SWIFT_CALL)
+# define SWIFT_CALL __attribute__((swiftcall))
+#endif
+#if !defined(SWIFT_INDIRECT_RESULT)
+# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
+#endif
+#if !defined(SWIFT_CONTEXT)
+# define SWIFT_CONTEXT __attribute__((swift_context))
+#endif
+#if !defined(SWIFT_ERROR_RESULT)
+# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
+#endif
+#if defined(__cplusplus)
+# define SWIFT_NOEXCEPT noexcept
+#else
+# define SWIFT_NOEXCEPT
+#endif
+#if !defined(SWIFT_C_INLINE_THUNK)
+# if __has_attribute(always_inline)
+# if __has_attribute(nodebug)
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
+# else
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
+# endif
+# else
+# define SWIFT_C_INLINE_THUNK inline
+# endif
+#endif
+#if defined(_WIN32)
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
+#endif
+#else
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL
+#endif
+#endif
+#if defined(__OBJC__)
+#if __has_feature(objc_modules)
+#if __has_warning("-Watimport-in-framework-header")
+#pragma clang diagnostic ignored "-Watimport-in-framework-header"
+#endif
+@import ObjectiveC;
+#endif
+
+#endif
+#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
+#pragma clang diagnostic ignored "-Wduplicate-method-arg"
+#if __has_warning("-Wpragma-clang-attribute")
+# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas"
+#pragma clang diagnostic ignored "-Wnullability"
+#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
+
+#if __has_attribute(external_source_symbol)
+# pragma push_macro("any")
+# undef any
+# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="WebServerNative",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
+# pragma pop_macro("any")
+#endif
+
+#if defined(__OBJC__)
+
+SWIFT_CLASS_NAMED("NSCClient")
+@interface NSCClient : NSObject
+@property (nonatomic, readonly) uint64_t id;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+enum NSCMessageType : NSInteger;
+@class NSString;
+@class NSData;
+
+SWIFT_CLASS_NAMED("NSCMessage")
+@interface NSCMessage : NSObject
+@property (nonatomic, readonly) enum NSCMessageType type;
+@property (nonatomic, readonly, copy) NSString * _Nullable text;
+@property (nonatomic, readonly, strong) NSData * _Nullable data;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+typedef SWIFT_ENUM_NAMED(NSInteger, NSCMessageType, "NSCMessageType", open) {
+ NSCMessageTypeText = 0,
+ NSCMessageTypeBinary = 1,
+ NSCMessageTypePing = 2,
+ NSCMessageTypePong = 3,
+};
+
+enum NSCServerStatus : NSInteger;
+
+SWIFT_CLASS_NAMED("NSCServer")
+@interface NSCServer : NSObject
+- (nonnull instancetype)init:(BOOL)logger :(NSString * _Nonnull)path :(NSString * _Nonnull)directory :(NSString * _Nullable)index :(NSString * _Nullable)hostName :(int16_t)port :(uint32_t)workers :(BOOL)showFiles OBJC_DESIGNATED_INITIALIZER;
+@property (nonatomic, readonly) enum NSCServerStatus status;
+- (void)setStatusChangeCallback:(void (^ _Nullable)(enum NSCServerStatus))callback;
+- (void)start:(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (void)stop:(BOOL)wait :(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+typedef SWIFT_ENUM_NAMED(NSInteger, NSCServerStatus, "NSCServerStatus", open) {
+ NSCServerStatusInactive = 0,
+ NSCServerStatusActive = 1,
+ NSCServerStatusCrashed = 2,
+ NSCServerStatusStarting = 3,
+ NSCServerStatusStopping = 4,
+};
+
+
+SWIFT_CLASS_NAMED("NSCWebSocketServer")
+@interface NSCWebSocketServer : NSObject
+- (nonnull instancetype)init:(BOOL)logger :(NSString * _Nonnull)path :(NSInteger)maxPayload :(NSString * _Nullable)hostName :(int16_t)port :(uint32_t)workers :(BOOL)autoPong OBJC_DESIGNATED_INITIALIZER;
+- (void)sendWithText:(NSString * _Nonnull)text id:(uint64_t)id;
+- (void)sendWithBinary:(NSData * _Nonnull)binary id:(uint64_t)id;
+- (void)sendWithPing:(NSData * _Nonnull)ping id:(uint64_t)id;
+- (void)sendEmptyPingWithId:(uint64_t)id;
+- (void)sendWithPong:(NSData * _Nonnull)pong id:(uint64_t)id;
+- (void)sendEmptyPongWithId:(uint64_t)id;
+- (void)broadcast:(NSString * _Nonnull)text;
+- (void)broadcastWithBinary:(NSData * _Nonnull)binary;
+- (void)broadcastWithPing:(NSData * _Nonnull)ping;
+- (void)broadcastEmptyPing;
+- (void)broadcastWithPong:(NSData * _Nonnull)pong;
+- (void)broadcastEmptyPong;
+- (uint64_t)addOnMessage:(void (^ _Nonnull)(NSCClient * _Nonnull, NSCMessage * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnMessage:(uint64_t)id;
+- (uint64_t)addOnPing:(void (^ _Nonnull)(NSCClient * _Nonnull, NSData * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnPing:(uint64_t)id;
+- (uint64_t)addOnPong:(void (^ _Nonnull)(NSCClient * _Nonnull, NSData * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnPong:(uint64_t)id;
+- (uint64_t)addOnConnect:(void (^ _Nonnull)(NSCClient * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnConnect:(uint64_t)id;
+- (uint64_t)addOnDisconnect:(void (^ _Nonnull)(NSCClient * _Nonnull, uint16_t, NSString * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnDisconnect:(uint64_t)id;
+- (uint64_t)addOnError:(void (^ _Nonnull)(NSCClient * _Nonnull, NSString * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnError:(uint64_t)id;
+@property (nonatomic, readonly) enum NSCServerStatus status;
+- (void)setStatusChangeCallback:(void (^ _Nullable)(enum NSCServerStatus))callback;
+- (void)start:(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (void)stop:(BOOL)wait :(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+#endif
+#if __has_attribute(external_source_symbol)
+# pragma clang attribute pop
+#endif
+#if defined(__cplusplus)
+#endif
+#pragma clang diagnostic pop
+#endif
+
+#else
+#error unsupported Swift architecture
+#endif
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/WebServerNative.h b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/WebServerNative.h
new file mode 100644
index 00000000..1a0158ba
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/WebServerNative.h
@@ -0,0 +1,25 @@
+//
+// WebServerNative.h
+// WebServerNative
+//
+// Created by Osei Fortune on 20/10/2024.
+//
+
+//#ifdef __cplusplus
+//extern "C" {
+//#endif
+
+#import
+#import "web_server_native.h"
+//! Project version number for WebServerNative.
+FOUNDATION_EXPORT double WebServerNativeVersionNumber;
+
+//! Project version string for WebServerNative.
+FOUNDATION_EXPORT const unsigned char WebServerNativeVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import
+
+//
+//#ifdef __cplusplus
+//}
+//#endif
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/web_server_native.h b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/web_server_native.h
new file mode 100644
index 00000000..bc57708e
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Headers/web_server_native.h
@@ -0,0 +1,198 @@
+#ifndef WEBSERVER_C_H
+#define WEBSERVER_C_H
+
+/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */
+
+#include
+#include
+#include
+#include
+
+typedef enum CServerStatus {
+ CServerStatus_Inactive,
+ CServerStatus_Active,
+ CServerStatus_Crashed,
+ CServerStatus_Starting,
+ CServerStatus_Stopping,
+} CServerStatus;
+
+typedef enum CWebsocketServerStatus {
+ CWebsocketServerStatus_Inactive,
+ CWebsocketServerStatus_Active,
+ CWebsocketServerStatus_Crashed,
+ CWebsocketServerStatus_Starting,
+ CWebsocketServerStatus_Stopping,
+} CWebsocketServerStatus;
+
+typedef enum WebsocketMessageType {
+ WebsocketMessageType_Text,
+ WebsocketMessageType_Binary,
+ WebsocketMessageType_Ping,
+ WebsocketMessageType_Pong,
+} WebsocketMessageType;
+
+typedef struct CClient CClient;
+
+typedef struct CServer CServer;
+
+typedef struct CWebsocketMessage CWebsocketMessage;
+
+typedef struct CWebsocketReason CWebsocketReason;
+
+typedef struct CWebsocketServer CWebsocketServer;
+
+typedef struct CStaticServiceOptions {
+ bool logger;
+ const char *path;
+ const char *directory;
+ const char *index;
+ const char *host_name;
+ int16_t port;
+ uint32_t workers;
+ bool show_files;
+} CStaticServiceOptions;
+
+typedef struct CWebSocketServiceOptions {
+ bool logger;
+ const char *path;
+ intptr_t max_payload;
+ const char *host_name;
+ int16_t port;
+ uint32_t workers;
+ bool auto_pong;
+} CWebSocketServiceOptions;
+
+struct CServer *webserver_init(const struct CStaticServiceOptions *options);
+
+void webserver_release(struct CServer *server);
+
+void webserver_start(struct CServer *server, void *data, void (*callback)(char*, void*));
+
+void webserver_stop(struct CServer *server, bool wait, void *data, void (*callback)(char*, void*));
+
+enum CServerStatus webserver_status(struct CServer *server);
+
+void webserver_error_release(char *error);
+
+void webserver_set_status_callback(struct CServer *server,
+ void *data,
+ void (*callback)(enum CServerStatus, void*));
+
+void webserver_clear_status_callback(struct CServer *server);
+
+struct CClient *webserver_websocket_client(struct CWebsocketServer *server, uint64_t client_id);
+
+uint64_t webserver_websocket_client_id(struct CClient *client);
+
+void webserver_websocket_client_release(struct CClient *client);
+
+struct CWebsocketServer *webserver_websocket_init(const struct CWebSocketServiceOptions *options);
+
+void webserver_websocket_release(struct CWebsocketServer *server);
+
+void webserver_websocket_start(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(char*, void*));
+
+void webserver_websocket_stop(struct CWebsocketServer *server,
+ bool wait,
+ void *data,
+ void (*callback)(char*, void*));
+
+enum CWebsocketServerStatus webserver_websocket_status(struct CWebsocketServer *server);
+
+void webserver_websocket_send_ping(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_ping(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_send_pong(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_pong(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_text(struct CWebsocketServer *server, const char *message);
+
+void webserver_websocket_send_text(struct CWebsocketServer *server,
+ uint64_t id,
+ const char *message);
+
+void webserver_websocket_send_binary(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_binary(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_set_status_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(enum CServerStatus, void*));
+
+void webserver_websocket_clear_status_callback(struct CWebsocketServer *server);
+
+void webserver_websocket_message_release(struct CWebsocketMessage *message);
+
+enum WebsocketMessageType webserver_websocket_message_type(struct CWebsocketMessage *message);
+
+const uint8_t *webserver_websocket_message_data(struct CWebsocketMessage *message);
+
+uintptr_t webserver_websocket_message_data_size(struct CWebsocketMessage *message);
+
+struct CWebsocketMessage *webserver_websocket_message_create_text(const char *text);
+
+struct CWebsocketMessage *webserver_websocket_message_create_ping(const uint8_t *data,
+ uintptr_t data_size);
+
+struct CWebsocketMessage *webserver_websocket_message_create_pong(const uint8_t *data,
+ uintptr_t data_size);
+
+struct CWebsocketMessage *webserver_websocket_message_create_binary(const uint8_t *data,
+ uintptr_t data_size);
+
+char *webserver_websocket_message_text(const struct CWebsocketMessage *message);
+
+uint16_t webserver_websocket_reason_code(const struct CWebsocketReason *reason);
+
+char *webserver_websocket_reason_description(const struct CWebsocketReason *reason);
+
+void webserver_websocket_reason_release(struct CWebsocketReason *reason);
+
+uint64_t webserver_websocket_add_connect_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t, void*));
+
+void webserver_websocket_remove_connect_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_disconnect_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t,
+ struct CWebsocketReason*,
+ void*));
+
+void webserver_websocket_remove_disconnect_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_message_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t,
+ struct CWebsocketMessage*,
+ void*));
+
+void webserver_websocket_remove_message_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_error_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t, char*, void*));
+
+void webserver_websocket_remove_error_callback(struct CWebsocketServer *server, uint64_t id);
+
+#endif /* WEBSERVER_C_H */
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Info.plist b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Info.plist
new file mode 100644
index 00000000..770f1ae2
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Info.plist differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo
new file mode 100644
index 00000000..41e8b659
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.abi.json b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.abi.json
new file mode 100644
index 00000000..4949df78
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.abi.json
@@ -0,0 +1,2810 @@
+{
+ "ABIRoot": {
+ "kind": "Root",
+ "name": "TopLevel",
+ "printedName": "TopLevel",
+ "children": [
+ {
+ "kind": "Import",
+ "name": "Foundation",
+ "printedName": "Foundation",
+ "declKind": "Import",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "RawDocComment"
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCMessageType",
+ "printedName": "NSCMessageType",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "Text",
+ "printedName": "Text",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypeText",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4TextyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 0
+ },
+ {
+ "kind": "Var",
+ "name": "Binary",
+ "printedName": "Binary",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypeBinary",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO6BinaryyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 1
+ },
+ {
+ "kind": "Var",
+ "name": "Ping",
+ "printedName": "Ping",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypePing",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4PingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 2
+ },
+ {
+ "kind": "Var",
+ "name": "Pong",
+ "printedName": "Pong",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypePong",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4PongyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 3
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(rawValue:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "WebServerNative.NSCMessageType?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfc",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "rawValue",
+ "printedName": "rawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueSivp",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueSivp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueSivg",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueSivg",
+ "moduleName": "WebServerNative",
+ "accessorKind": "get"
+ }
+ ]
+ }
+ ],
+ "declKind": "Enum",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCMessageType",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "enumRawTypeName": "Int",
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "RawRepresentable",
+ "printedName": "RawRepresentable",
+ "children": [
+ {
+ "kind": "TypeWitness",
+ "name": "RawValue",
+ "printedName": "RawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ]
+ }
+ ],
+ "usr": "s:SY",
+ "mangledName": "$sSY"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCMessage",
+ "printedName": "NSCMessage",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "type",
+ "printedName": "type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)type",
+ "mangledName": "$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "Final",
+ "HasStorage",
+ "AccessControl",
+ "ObjC"
+ ],
+ "isLet": true,
+ "hasStorage": true,
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)type",
+ "mangledName": "$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvg",
+ "moduleName": "WebServerNative",
+ "implicit": true,
+ "declAttributes": [
+ "Final",
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Var",
+ "name": "text",
+ "printedName": "text",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)text",
+ "mangledName": "$s15WebServerNative10NSCMessageC4textSSSgvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)text",
+ "mangledName": "$s15WebServerNative10NSCMessageC4textSSSgvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Var",
+ "name": "data",
+ "printedName": "data",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)data",
+ "mangledName": "$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)data",
+ "mangledName": "$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessage",
+ "printedName": "WebServerNative.NSCMessage",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)init",
+ "mangledName": "$s15WebServerNative10NSCMessageCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage",
+ "mangledName": "$s15WebServerNative10NSCMessageC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCMessage",
+ "declAttributes": [
+ "AccessControl",
+ "ObjCMembers",
+ "ObjC"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "hasMissingDesignatedInitializers": true,
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCClient",
+ "printedName": "NSCClient",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "id",
+ "printedName": "id",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(py)id",
+ "mangledName": "$s15WebServerNative9NSCClientC2ids6UInt64Vvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(im)id",
+ "mangledName": "$s15WebServerNative9NSCClientC2ids6UInt64Vvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(im)init",
+ "mangledName": "$s15WebServerNative9NSCClientCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient",
+ "mangledName": "$s15WebServerNative9NSCClientC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCClient",
+ "declAttributes": [
+ "AccessControl",
+ "ObjCMembers",
+ "ObjC"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "hasMissingDesignatedInitializers": true,
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCWebSocketServer",
+ "printedName": "NSCWebSocketServer",
+ "children": [
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(_:_:_:_:_:_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCWebSocketServer",
+ "printedName": "WebServerNative.NSCWebSocketServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int16",
+ "printedName": "Swift.Int16",
+ "usr": "s:s5Int16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt32",
+ "printedName": "Swift.UInt32",
+ "usr": "s:s6UInt32V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)init:::::::",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(text:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithText:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(binary:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithBinary:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send6binary2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(ping:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithPing:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4ping2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "sendEmptyPing",
+ "printedName": "sendEmptyPing(id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendEmptyPingWithId:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(pong:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithPong:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4pong2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "sendEmptyPong",
+ "printedName": "sendEmptyPong(id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendEmptyPongWithId:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcast:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcastyySSF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(binary:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithBinary:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast6binaryySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(ping:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast4pingySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcastEmptyPing",
+ "printedName": "broadcastEmptyPing()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastEmptyPing",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(pong:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast4pongySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcastEmptyPong",
+ "printedName": "broadcastEmptyPong()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastEmptyPong",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnMessage",
+ "printedName": "addOnMessage(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, WebServerNative.NSCMessage) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, WebServerNative.NSCMessage)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessage",
+ "printedName": "WebServerNative.NSCMessage",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnMessage:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnMessage",
+ "printedName": "removeOnMessage(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnMessage:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15removeOnMessageyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnPing",
+ "printedName": "addOnPing(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnPing",
+ "printedName": "removeOnPing(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12removeOnPingyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnPong",
+ "printedName": "addOnPong(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnPong",
+ "printedName": "removeOnPong(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12removeOnPongyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnConnect",
+ "printedName": "addOnConnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnConnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnConnect",
+ "printedName": "removeOnConnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnConnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15removeOnConnectyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnDisconnect",
+ "printedName": "addOnDisconnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Swift.UInt16, Swift.String?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt16",
+ "printedName": "Swift.UInt16",
+ "usr": "s:s6UInt16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnDisconnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnDisconnect",
+ "printedName": "removeOnDisconnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnDisconnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnError",
+ "printedName": "addOnError(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Swift.String) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Swift.String)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnError:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnError",
+ "printedName": "removeOnError(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnError:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13removeOnErroryys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Var",
+ "name": "status",
+ "printedName": "status",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(py)status",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)status",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Function",
+ "name": "setStatusChangeCallback",
+ "printedName": "setStatusChangeCallback(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "((WebServerNative.NSCServerStatus) -> ())?",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)setStatusChangeCallback:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "start",
+ "printedName": "start(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)start:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "stop",
+ "printedName": "stop(_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)stop::",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCWebSocketServer",
+ "printedName": "WebServerNative.NSCWebSocketServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)init",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0CACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCWebSocketServer",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC",
+ "ObjCMembers"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "Import",
+ "name": "Foundation",
+ "printedName": "Foundation",
+ "declKind": "Import",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "RawDocComment"
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCServerStatus",
+ "printedName": "NSCServerStatus",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "Inactive",
+ "printedName": "Inactive",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusInactive",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8InactiveyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 0
+ },
+ {
+ "kind": "Var",
+ "name": "Active",
+ "printedName": "Active",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusActive",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO6ActiveyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 1
+ },
+ {
+ "kind": "Var",
+ "name": "Crashed",
+ "printedName": "Crashed",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusCrashed",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO7CrashedyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 2
+ },
+ {
+ "kind": "Var",
+ "name": "Starting",
+ "printedName": "Starting",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusStarting",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8StartingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 3
+ },
+ {
+ "kind": "Var",
+ "name": "Stopping",
+ "printedName": "Stopping",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusStopping",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8StoppingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 4
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(rawValue:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "WebServerNative.NSCServerStatus?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfc",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "rawValue",
+ "printedName": "rawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueSivp",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueSivp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueSivg",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueSivg",
+ "moduleName": "WebServerNative",
+ "accessorKind": "get"
+ }
+ ]
+ }
+ ],
+ "declKind": "Enum",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCServerStatus",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "enumRawTypeName": "Int",
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "RawRepresentable",
+ "printedName": "RawRepresentable",
+ "children": [
+ {
+ "kind": "TypeWitness",
+ "name": "RawValue",
+ "printedName": "RawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ]
+ }
+ ],
+ "usr": "s:SY",
+ "mangledName": "$sSY"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCServer",
+ "printedName": "NSCServer",
+ "children": [
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(_:_:_:_:_:_:_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServer",
+ "printedName": "WebServerNative.NSCServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int16",
+ "printedName": "Swift.Int16",
+ "usr": "s:s5Int16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt32",
+ "printedName": "Swift.UInt32",
+ "usr": "s:s6UInt32V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)init::::::::",
+ "mangledName": "$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "status",
+ "printedName": "status",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(py)status",
+ "mangledName": "$s15WebServerNative9NSCServerC6statusAA0D6StatusOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)status",
+ "mangledName": "$s15WebServerNative9NSCServerC6statusAA0D6StatusOvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Function",
+ "name": "setStatusChangeCallback",
+ "printedName": "setStatusChangeCallback(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "((WebServerNative.NSCServerStatus) -> ())?",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)setStatusChangeCallback:",
+ "mangledName": "$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "start",
+ "printedName": "start(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)start:",
+ "mangledName": "$s15WebServerNative9NSCServerC5startyyySSSgcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "stop",
+ "printedName": "stop(_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)stop::",
+ "mangledName": "$s15WebServerNative9NSCServerC4stopyySb_ySSSgctF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServer",
+ "printedName": "WebServerNative.NSCServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)init",
+ "mangledName": "$s15WebServerNative9NSCServerCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer",
+ "mangledName": "$s15WebServerNative9NSCServerC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCServer",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC",
+ "ObjCMembers"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ }
+ ],
+ "json_format_version": 8
+ },
+ "ConstValues": [
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 255,
+ "length": 6,
+ "value": "1"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 271,
+ "length": 4,
+ "value": "2"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 285,
+ "length": 4,
+ "value": "3"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 869,
+ "length": 10,
+ "value": "\"WebServerNative.NSCMessage\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1809,
+ "length": 18,
+ "value": "\"WebServerNative.NSCMessageCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 2550,
+ "length": 17,
+ "value": "\"WebServerNative.NSCReasonCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 3337,
+ "length": 17,
+ "value": "\"WebServerNative.NSCStringCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 4056,
+ "length": 15,
+ "value": "\"WebServerNative.NSCDataCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 4777,
+ "length": 18,
+ "value": "\"WebServerNative.NSCConnectCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 5498,
+ "length": 9,
+ "value": "\"WebServerNative.NSCClient\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7544,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7604,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7658,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7718,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7780,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7837,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 7401,
+ "length": 18,
+ "value": "\"WebServerNative.NSCWebSocketServer\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 252,
+ "length": 6,
+ "value": "1"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 268,
+ "length": 7,
+ "value": "2"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 285,
+ "length": 8,
+ "value": "3"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 303,
+ "length": 8,
+ "value": "4"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1041,
+ "length": 11,
+ "value": "\"WebServerNative.NSCCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1199,
+ "length": 17,
+ "value": "\"WebServerNative.NSCStatusCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1417,
+ "length": 9,
+ "value": "\"WebServerNative.NSCServer\""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.private.swiftinterface b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.private.swiftinterface
new file mode 100644
index 00000000..341c68f0
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.private.swiftinterface
@@ -0,0 +1,96 @@
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+// swift-module-flags: -target arm64-apple-ios13.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name WebServerNative
+import Foundation
+import Swift
+@_exported import WebServerNative
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@objc(NSCMessageType) public enum NSCMessageType : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Text
+ case Binary
+ case Ping
+ case Pong
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCMessageType.RawValue {
+ get
+ }
+}
+@_hasMissingDesignatedInitializers @objc(NSCMessage) @objcMembers public class NSCMessage : ObjectiveC.NSObject {
+ @objc final public let type: WebServerNative.NSCMessageType
+ @objc public var text: Swift.String? {
+ @objc get
+ }
+ @objc public var data: Foundation.NSData? {
+ @objc get
+ }
+ @objc deinit
+}
+@_hasMissingDesignatedInitializers @objc(NSCClient) @objcMembers public class NSCClient : ObjectiveC.NSObject {
+ @objc public var id: Swift.UInt64 {
+ @objc get
+ }
+ @objc deinit
+}
+@objcMembers @objc(NSCWebSocketServer) public class NSCWebSocketServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ maxPayload: Swift.Int, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ autoPong: Swift.Bool)
+ @objc deinit
+ @objc public func send(text: Swift.String, id: Swift.UInt64)
+ @objc public func send(binary: Foundation.NSData, id: Swift.UInt64)
+ @objc public func send(ping: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPing(id: Swift.UInt64)
+ @objc public func send(pong: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPong(id: Swift.UInt64)
+ @objc public func broadcast(_ text: Swift.String)
+ @objc public func broadcast(binary: Foundation.NSData)
+ @objc public func broadcast(ping: Foundation.NSData)
+ @objc public func broadcastEmptyPing()
+ @objc public func broadcast(pong: Foundation.NSData)
+ @objc public func broadcastEmptyPong()
+ @objc public func addOnMessage(_ callback: @escaping (WebServerNative.NSCClient, WebServerNative.NSCMessage) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnMessage(_ id: Swift.UInt64)
+ @objc public func addOnPing(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPing(_ id: Swift.UInt64)
+ @objc public func addOnPong(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPong(_ id: Swift.UInt64)
+ @objc public func addOnConnect(_ callback: @escaping (WebServerNative.NSCClient) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnConnect(_ id: Swift.UInt64)
+ @objc public func addOnDisconnect(_ callback: @escaping (WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnDisconnect(_ id: Swift.UInt64)
+ @objc public func addOnError(_ callback: @escaping (WebServerNative.NSCClient, Swift.String) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnError(_ id: Swift.UInt64)
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+@objc(NSCServerStatus) public enum NSCServerStatus : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Inactive
+ case Active
+ case Crashed
+ case Starting
+ case Stopping
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCServerStatus.RawValue {
+ get
+ }
+}
+@objcMembers @objc(NSCServer) public class NSCServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ directory: Swift.String, _ index: Swift.String?, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ showFiles: Swift.Bool)
+ @objc deinit
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+extension WebServerNative.NSCMessageType : Swift.Equatable {}
+extension WebServerNative.NSCMessageType : Swift.Hashable {}
+extension WebServerNative.NSCServerStatus : Swift.Equatable {}
+extension WebServerNative.NSCServerStatus : Swift.Hashable {}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.swiftdoc b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.swiftdoc
new file mode 100644
index 00000000..bb5e83a2
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.swiftdoc differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.swiftinterface b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.swiftinterface
new file mode 100644
index 00000000..341c68f0
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios.swiftinterface
@@ -0,0 +1,96 @@
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+// swift-module-flags: -target arm64-apple-ios13.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name WebServerNative
+import Foundation
+import Swift
+@_exported import WebServerNative
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@objc(NSCMessageType) public enum NSCMessageType : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Text
+ case Binary
+ case Ping
+ case Pong
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCMessageType.RawValue {
+ get
+ }
+}
+@_hasMissingDesignatedInitializers @objc(NSCMessage) @objcMembers public class NSCMessage : ObjectiveC.NSObject {
+ @objc final public let type: WebServerNative.NSCMessageType
+ @objc public var text: Swift.String? {
+ @objc get
+ }
+ @objc public var data: Foundation.NSData? {
+ @objc get
+ }
+ @objc deinit
+}
+@_hasMissingDesignatedInitializers @objc(NSCClient) @objcMembers public class NSCClient : ObjectiveC.NSObject {
+ @objc public var id: Swift.UInt64 {
+ @objc get
+ }
+ @objc deinit
+}
+@objcMembers @objc(NSCWebSocketServer) public class NSCWebSocketServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ maxPayload: Swift.Int, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ autoPong: Swift.Bool)
+ @objc deinit
+ @objc public func send(text: Swift.String, id: Swift.UInt64)
+ @objc public func send(binary: Foundation.NSData, id: Swift.UInt64)
+ @objc public func send(ping: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPing(id: Swift.UInt64)
+ @objc public func send(pong: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPong(id: Swift.UInt64)
+ @objc public func broadcast(_ text: Swift.String)
+ @objc public func broadcast(binary: Foundation.NSData)
+ @objc public func broadcast(ping: Foundation.NSData)
+ @objc public func broadcastEmptyPing()
+ @objc public func broadcast(pong: Foundation.NSData)
+ @objc public func broadcastEmptyPong()
+ @objc public func addOnMessage(_ callback: @escaping (WebServerNative.NSCClient, WebServerNative.NSCMessage) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnMessage(_ id: Swift.UInt64)
+ @objc public func addOnPing(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPing(_ id: Swift.UInt64)
+ @objc public func addOnPong(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPong(_ id: Swift.UInt64)
+ @objc public func addOnConnect(_ callback: @escaping (WebServerNative.NSCClient) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnConnect(_ id: Swift.UInt64)
+ @objc public func addOnDisconnect(_ callback: @escaping (WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnDisconnect(_ id: Swift.UInt64)
+ @objc public func addOnError(_ callback: @escaping (WebServerNative.NSCClient, Swift.String) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnError(_ id: Swift.UInt64)
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+@objc(NSCServerStatus) public enum NSCServerStatus : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Inactive
+ case Active
+ case Crashed
+ case Starting
+ case Stopping
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCServerStatus.RawValue {
+ get
+ }
+}
+@objcMembers @objc(NSCServer) public class NSCServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ directory: Swift.String, _ index: Swift.String?, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ showFiles: Swift.Bool)
+ @objc deinit
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+extension WebServerNative.NSCMessageType : Swift.Equatable {}
+extension WebServerNative.NSCMessageType : Swift.Hashable {}
+extension WebServerNative.NSCServerStatus : Swift.Equatable {}
+extension WebServerNative.NSCServerStatus : Swift.Hashable {}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/module.modulemap b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/module.modulemap
new file mode 100644
index 00000000..50ecc1d5
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/Modules/module.modulemap
@@ -0,0 +1,11 @@
+framework module WebServerNative {
+ umbrella header "WebServerNative.h"
+ export *
+
+ module * { export * }
+}
+
+module WebServerNative.Swift {
+ header "WebServerNative-Swift.h"
+ requires objc
+}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/WebServerNative b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/WebServerNative
new file mode 100755
index 00000000..13fa53ed
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/WebServerNative.framework/WebServerNative differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Info.plist b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Info.plist
new file mode 100644
index 00000000..32051ae1
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleIdentifier
+ com.apple.xcode.dsym.io.nstudio.plugins.webserver.WebServerNative
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ dSYM
+ CFBundleSignature
+ ????
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/DWARF/WebServerNative b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/DWARF/WebServerNative
new file mode 100644
index 00000000..78b5b733
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/DWARF/WebServerNative differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/aarch64/WebServerNative.yml b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/aarch64/WebServerNative.yml
new file mode 100644
index 00000000..cea13188
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/aarch64/WebServerNative.yml
@@ -0,0 +1,208 @@
+---
+triple: 'arm64-apple-darwin'
+binary-path: '/Users/triniwiz/Documents/GitHub/nstudio-nativescript-plugins/packages/nativescript-web-server/src-native/web-server-ios/dist/Release-iphoneos/WebServerNative.framework/WebServerNative'
+relocations:
+ - { offsetInCU: 0x34, offset: 0x2E93B, size: 0x8, addend: 0x0, symName: _WebServerNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x235C40, symSize: 0x0 }
+ - { offsetInCU: 0x69, offset: 0x2E970, size: 0x8, addend: 0x0, symName: _WebServerNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x235C78, symSize: 0x0 }
+ - { offsetInCU: 0x8D, offset: 0x2EA13, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x1F4, symBinAddr: 0x81F4, symSize: 0x30 }
+ - { offsetInCU: 0xBF, offset: 0x2EA45, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x224, symBinAddr: 0x8224, symSize: 0x44 }
+ - { offsetInCU: 0xEC, offset: 0x2EA72, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfCTf4nd_n', symObjAddr: 0x4858, symBinAddr: 0xC838, symSize: 0x14 }
+ - { offsetInCU: 0x199, offset: 0x2EB1F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvgTo', symObjAddr: 0x268, symBinAddr: 0x8268, symSize: 0x10 }
+ - { offsetInCU: 0x1B9, offset: 0x2EB3F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvgTo', symObjAddr: 0x268, symBinAddr: 0x8268, symSize: 0x10 }
+ - { offsetInCU: 0x1EF, offset: 0x2EB75, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvsTo', symObjAddr: 0x278, symBinAddr: 0x8278, symSize: 0x10 }
+ - { offsetInCU: 0x20F, offset: 0x2EB95, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvsTo', symObjAddr: 0x278, symBinAddr: 0x8278, symSize: 0x10 }
+ - { offsetInCU: 0x248, offset: 0x2EBCE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvgTo', symObjAddr: 0x288, symBinAddr: 0x8288, symSize: 0x10 }
+ - { offsetInCU: 0x268, offset: 0x2EBEE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvgTo', symObjAddr: 0x288, symBinAddr: 0x8288, symSize: 0x10 }
+ - { offsetInCU: 0x2A3, offset: 0x2EC29, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7message4typeACs13OpaquePointerVSg_AA0D4TypeOtcfcTo', symObjAddr: 0x2A8, symBinAddr: 0x82A8, symSize: 0x74 }
+ - { offsetInCU: 0x306, offset: 0x2EC8C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvgTo', symObjAddr: 0x31C, symBinAddr: 0x831C, symSize: 0x70 }
+ - { offsetInCU: 0x37F, offset: 0x2ED05, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvgTo', symObjAddr: 0x3C0, symBinAddr: 0x83C0, symSize: 0x70 }
+ - { offsetInCU: 0x421, offset: 0x2EDA7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCACycfcTo', symObjAddr: 0x648, symBinAddr: 0x8648, symSize: 0x2C }
+ - { offsetInCU: 0x4F0, offset: 0x2EE76, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative23convertNSCMessageToDataySo6NSDataCSgAA0E0CF', symObjAddr: 0x488, symBinAddr: 0x8488, symSize: 0x120 }
+ - { offsetInCU: 0x61E, offset: 0x2EFA4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCfETo', symObjAddr: 0x5E0, symBinAddr: 0x85E0, symSize: 0x3C }
+ - { offsetInCU: 0x6D1, offset: 0x2F057, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackCACycfcTo', symObjAddr: 0x8AC, symBinAddr: 0x88AC, symSize: 0x2C }
+ - { offsetInCU: 0x7B6, offset: 0x2F13C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC6clientACs13OpaquePointerVSg_tcfcTo', symObjAddr: 0x132C, symBinAddr: 0x932C, symSize: 0x48 }
+ - { offsetInCU: 0x827, offset: 0x2F1AD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64VvgTo', symObjAddr: 0x1374, symBinAddr: 0x9374, symSize: 0x18 }
+ - { offsetInCU: 0x847, offset: 0x2F1CD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64VvgTo', symObjAddr: 0x1374, symBinAddr: 0x9374, symSize: 0x18 }
+ - { offsetInCU: 0x866, offset: 0x2F1EC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64VvgTo', symObjAddr: 0x1374, symBinAddr: 0x9374, symSize: 0x18 }
+ - { offsetInCU: 0x898, offset: 0x2F21E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCACycfcTo', symObjAddr: 0x14E0, symBinAddr: 0x94E0, symSize: 0x2C }
+ - { offsetInCU: 0x91B, offset: 0x2F2A1, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x880, symBinAddr: 0x8880, symSize: 0x2C }
+ - { offsetInCU: 0x9A6, offset: 0x2F32C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackCACycfcTo', symObjAddr: 0xB50, symBinAddr: 0x8B50, symSize: 0x2C }
+ - { offsetInCU: 0xAD2, offset: 0x2F458, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackCACycfcTo', symObjAddr: 0xDB8, symBinAddr: 0x8DB8, symSize: 0x2C }
+ - { offsetInCU: 0xBFE, offset: 0x2F584, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackCACycfcTo', symObjAddr: 0x1018, symBinAddr: 0x9018, symSize: 0x2C }
+ - { offsetInCU: 0xD25, offset: 0x2F6AB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackCACycfcTo', symObjAddr: 0x1258, symBinAddr: 0x9258, symSize: 0x2C }
+ - { offsetInCU: 0xDE3, offset: 0x2F769, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative20convertMessageToDataySo6NSDataCSgs13OpaquePointerVSgF', symObjAddr: 0x150C, symBinAddr: 0x950C, symSize: 0xFC }
+ - { offsetInCU: 0xEFF, offset: 0x2F885, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvgTo', symObjAddr: 0x1608, symBinAddr: 0x9608, symSize: 0x10 }
+ - { offsetInCU: 0xF1F, offset: 0x2F8A5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvgTo', symObjAddr: 0x1608, symBinAddr: 0x9608, symSize: 0x10 }
+ - { offsetInCU: 0xF57, offset: 0x2F8DD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvsTo', symObjAddr: 0x1618, symBinAddr: 0x9618, symSize: 0x10 }
+ - { offsetInCU: 0xF77, offset: 0x2F8FD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvsTo', symObjAddr: 0x1618, symBinAddr: 0x9618, symSize: 0x10 }
+ - { offsetInCU: 0xFB2, offset: 0x2F938, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvgTo', symObjAddr: 0x1628, symBinAddr: 0x9628, symSize: 0x10 }
+ - { offsetInCU: 0xFD2, offset: 0x2F958, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvgTo', symObjAddr: 0x1628, symBinAddr: 0x9628, symSize: 0x10 }
+ - { offsetInCU: 0x100A, offset: 0x2F990, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvsTo', symObjAddr: 0x1638, symBinAddr: 0x9638, symSize: 0x10 }
+ - { offsetInCU: 0x102A, offset: 0x2F9B0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvsTo', symObjAddr: 0x1638, symBinAddr: 0x9638, symSize: 0x10 }
+ - { offsetInCU: 0x10C2, offset: 0x2FA48, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfcTo', symObjAddr: 0x1B0C, symBinAddr: 0x9B0C, symSize: 0xB0 }
+ - { offsetInCU: 0x10F5, offset: 0x2FA7B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfDTo', symObjAddr: 0x1C00, symBinAddr: 0x9C00, symSize: 0x68 }
+ - { offsetInCU: 0x1152, offset: 0x2FAD8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtFTo', symObjAddr: 0x1D40, symBinAddr: 0x9D40, symSize: 0xA0 }
+ - { offsetInCU: 0x11D0, offset: 0x2FB56, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tFTo', symObjAddr: 0x1E2C, symBinAddr: 0x9E2C, symSize: 0x1C }
+ - { offsetInCU: 0x1251, offset: 0x2FBD7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tFTo', symObjAddr: 0x1FAC, symBinAddr: 0x9FAC, symSize: 0x1C }
+ - { offsetInCU: 0x12D2, offset: 0x2FC58, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9broadcastyySSFTo', symObjAddr: 0x2020, symBinAddr: 0xA020, symSize: 0x90 }
+ - { offsetInCU: 0x134B, offset: 0x2FCD1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyFTo', symObjAddr: 0x20F8, symBinAddr: 0xA0F8, symSize: 0x18 }
+ - { offsetInCU: 0x136B, offset: 0x2FCF1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyFTo', symObjAddr: 0x20F8, symBinAddr: 0xA0F8, symSize: 0x18 }
+ - { offsetInCU: 0x138B, offset: 0x2FD11, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyFTo', symObjAddr: 0x20F8, symBinAddr: 0xA0F8, symSize: 0x18 }
+ - { offsetInCU: 0x13BF, offset: 0x2FD45, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyFTo', symObjAddr: 0x2258, symBinAddr: 0xA258, symSize: 0x18 }
+ - { offsetInCU: 0x13DF, offset: 0x2FD65, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyFTo', symObjAddr: 0x2258, symBinAddr: 0xA258, symSize: 0x18 }
+ - { offsetInCU: 0x13FF, offset: 0x2FD85, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyFTo', symObjAddr: 0x2258, symBinAddr: 0xA258, symSize: 0x18 }
+ - { offsetInCU: 0x154E, offset: 0x2FED4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VFTo', symObjAddr: 0x3198, symBinAddr: 0xB198, symSize: 0xEC }
+ - { offsetInCU: 0x1626, offset: 0x2FFAC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvgTo', symObjAddr: 0x365C, symBinAddr: 0xB65C, symSize: 0x34 }
+ - { offsetInCU: 0x1675, offset: 0x2FFFB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFTo', symObjAddr: 0x38CC, symBinAddr: 0xB8CC, symSize: 0x8C }
+ - { offsetInCU: 0x16AD, offset: 0x30033, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcFTo', symObjAddr: 0x39E8, symBinAddr: 0xB9E8, symSize: 0xD8 }
+ - { offsetInCU: 0x1783, offset: 0x30109, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctFTo', symObjAddr: 0x3C10, symBinAddr: 0xBC10, symSize: 0xE0 }
+ - { offsetInCU: 0x1866, offset: 0x301EC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfcTo', symObjAddr: 0x3D3C, symBinAddr: 0xBD3C, symSize: 0x2C }
+ - { offsetInCU: 0x18D0, offset: 0x30256, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfETo', symObjAddr: 0x1C68, symBinAddr: 0x9C68, symSize: 0x78 }
+ - { offsetInCU: 0x1911, offset: 0x30297, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCs6UInt16VSo8NSStringCSgIeyByyy_AcESSSgIeggyg_TR', symObjAddr: 0x3058, symBinAddr: 0xB058, symSize: 0x64 }
+ - { offsetInCU: 0x19CB, offset: 0x30351, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3D68, symBinAddr: 0xBD68, symSize: 0x48 }
+ - { offsetInCU: 0x1A3D, offset: 0x303C3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCMa', symObjAddr: 0x48C4, symBinAddr: 0xC8A4, symSize: 0x20 }
+ - { offsetInCU: 0x1A51, offset: 0x303D7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCMa', symObjAddr: 0x48E4, symBinAddr: 0xC8C4, symSize: 0x20 }
+ - { offsetInCU: 0x1A65, offset: 0x303EB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CMa', symObjAddr: 0x49FC, symBinAddr: 0xC9DC, symSize: 0x20 }
+ - { offsetInCU: 0x1A79, offset: 0x303FF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackCMa', symObjAddr: 0x4A1C, symBinAddr: 0xC9FC, symSize: 0x20 }
+ - { offsetInCU: 0x1A8D, offset: 0x30413, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackCMa', symObjAddr: 0x4A3C, symBinAddr: 0xCA1C, symSize: 0x20 }
+ - { offsetInCU: 0x1AA1, offset: 0x30427, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackCMa', symObjAddr: 0x4A5C, symBinAddr: 0xCA3C, symSize: 0x20 }
+ - { offsetInCU: 0x1AB5, offset: 0x3043B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackCMa', symObjAddr: 0x4A7C, symBinAddr: 0xCA5C, symSize: 0x20 }
+ - { offsetInCU: 0x1AC9, offset: 0x3044F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackCMa', symObjAddr: 0x4A9C, symBinAddr: 0xCA7C, symSize: 0x20 }
+ - { offsetInCU: 0x1ADD, offset: 0x30463, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASQWb', symObjAddr: 0x4ABC, symBinAddr: 0xCA9C, symSize: 0x4 }
+ - { offsetInCU: 0x1AF1, offset: 0x30477, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOACSQAAWl', symObjAddr: 0x4AC0, symBinAddr: 0xCAA0, symSize: 0x44 }
+ - { offsetInCU: 0x1B05, offset: 0x3048B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOMa', symObjAddr: 0x4B04, symBinAddr: 0xCAE4, symSize: 0x10 }
+ - { offsetInCU: 0x1B19, offset: 0x3049F, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaMa', symObjAddr: 0x4EAC, symBinAddr: 0xCE8C, symSize: 0x54 }
+ - { offsetInCU: 0x1B2D, offset: 0x304B3, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSQWb', symObjAddr: 0x4F00, symBinAddr: 0xCEE0, symSize: 0x24 }
+ - { offsetInCU: 0x1B41, offset: 0x304C7, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefa14CoreFoundation9_CFObjectSCSHWb', symObjAddr: 0x4F24, symBinAddr: 0xCF04, symSize: 0x24 }
+ - { offsetInCU: 0x1B55, offset: 0x304DB, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TRTA', symObjAddr: 0x4F6C, symBinAddr: 0xCF4C, symSize: 0x8 }
+ - { offsetInCU: 0x1B69, offset: 0x304EF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIegy_SgWOe', symObjAddr: 0x4F74, symBinAddr: 0xCF54, symSize: 0x10 }
+ - { offsetInCU: 0x1B7D, offset: 0x30503, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TRTA', symObjAddr: 0x4F84, symBinAddr: 0xCF64, symSize: 0x8 }
+ - { offsetInCU: 0x1B9C, offset: 0x30522, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCSo8NSStringCIeyByy_ACSSIeggg_TRTA', symObjAddr: 0x4F8C, symBinAddr: 0xCF6C, symSize: 0x50 }
+ - { offsetInCU: 0x1BC5, offset: 0x3054B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCs6UInt16VSo8NSStringCSgIeyByyy_AcESSSgIeggyg_TRTA', symObjAddr: 0x4FDC, symBinAddr: 0xCFBC, symSize: 0x8 }
+ - { offsetInCU: 0x1BE4, offset: 0x3056A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCIeyBy_ACIegg_TRTA', symObjAddr: 0x4FE4, symBinAddr: 0xCFC4, symSize: 0x10 }
+ - { offsetInCU: 0x1C18, offset: 0x3059E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCSo6NSDataCSgIeyByy_AcFIeggg_TRTA', symObjAddr: 0x4FF4, symBinAddr: 0xCFD4, symSize: 0x14 }
+ - { offsetInCU: 0x1C4C, offset: 0x305D2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCAA10NSCMessageCIeyByy_AcEIeggg_TRTA', symObjAddr: 0x5008, symBinAddr: 0xCFE8, symSize: 0x14 }
+ - { offsetInCU: 0x1C75, offset: 0x305FB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackC7triggeryyAA9NSCClientCFyycfU_TA', symObjAddr: 0x5048, symBinAddr: 0xD028, symSize: 0x48 }
+ - { offsetInCU: 0x1CD3, offset: 0x30659, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5090, symBinAddr: 0xD070, symSize: 0x10 }
+ - { offsetInCU: 0x1CE7, offset: 0x3066D, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x50A0, symBinAddr: 0xD080, symSize: 0x8 }
+ - { offsetInCU: 0x1CFB, offset: 0x30681, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackC7triggeryyAA9NSCClientC_SStFyycfU_TA', symObjAddr: 0x512C, symBinAddr: 0xD10C, symSize: 0x60 }
+ - { offsetInCU: 0x1D63, offset: 0x306E9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackC7triggeryyAA9NSCClientC_s6UInt16VSSSgtFyycfU_TA', symObjAddr: 0x51C0, symBinAddr: 0xD1A0, symSize: 0x68 }
+ - { offsetInCU: 0x1DC3, offset: 0x30749, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x52BC, symBinAddr: 0xD29C, symSize: 0x40 }
+ - { offsetInCU: 0x1DD7, offset: 0x3075D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative20convertMessageToDataySo6NSDataCSgs13OpaquePointerVSgFySv_SitcfU_TA', symObjAddr: 0x530C, symBinAddr: 0xD2EC, symSize: 0x8 }
+ - { offsetInCU: 0x1E09, offset: 0x3078F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative23convertNSCMessageToDataySo6NSDataCSgAA0E0CFySv_SitcfU_TA', symObjAddr: 0x5324, symBinAddr: 0xD304, symSize: 0x8 }
+ - { offsetInCU: 0x1E70, offset: 0x307F6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x54, symBinAddr: 0x8054, symSize: 0x5C }
+ - { offsetInCU: 0x1F62, offset: 0x308E8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH9hashValueSivgTW', symObjAddr: 0xB0, symBinAddr: 0x80B0, symSize: 0x78 }
+ - { offsetInCU: 0x200E, offset: 0x30994, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x128, symBinAddr: 0x8128, symSize: 0x58 }
+ - { offsetInCU: 0x207E, offset: 0x30A04, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x180, symBinAddr: 0x8180, symSize: 0x74 }
+ - { offsetInCU: 0x23C9, offset: 0x30D4F, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x3EA0, symBinAddr: 0xBE80, symSize: 0x58 }
+ - { offsetInCU: 0x25C9, offset: 0x30F4F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfC', symObjAddr: 0x0, symBinAddr: 0x8000, symSize: 0x18 }
+ - { offsetInCU: 0x25DD, offset: 0x30F63, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueSivg', symObjAddr: 0x18, symBinAddr: 0x8018, symSize: 0x3C }
+ - { offsetInCU: 0x2690, offset: 0x31016, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvg', symObjAddr: 0x298, symBinAddr: 0x8298, symSize: 0x10 }
+ - { offsetInCU: 0x26E0, offset: 0x31066, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvg', symObjAddr: 0x38C, symBinAddr: 0x838C, symSize: 0x34 }
+ - { offsetInCU: 0x2741, offset: 0x310C7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvg', symObjAddr: 0x430, symBinAddr: 0x8430, symSize: 0x58 }
+ - { offsetInCU: 0x27D4, offset: 0x3115A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCACycfc', symObjAddr: 0x61C, symBinAddr: 0x861C, symSize: 0x2C }
+ - { offsetInCU: 0x2885, offset: 0x3120B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackC7triggeryyAA9NSCClientC_AA0D0CtF', symObjAddr: 0x674, symBinAddr: 0x8674, symSize: 0x20C }
+ - { offsetInCU: 0x29A6, offset: 0x3132C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackC7triggeryyAA9NSCClientC_s6UInt16VSSSgtF', symObjAddr: 0x900, symBinAddr: 0x8900, symSize: 0x250 }
+ - { offsetInCU: 0x2B15, offset: 0x3149B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackC7triggeryyAA9NSCClientC_SStF', symObjAddr: 0xBA4, symBinAddr: 0x8BA4, symSize: 0x214 }
+ - { offsetInCU: 0x2C68, offset: 0x315EE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackC7triggeryyAA9NSCClientC_So6NSDataCSgtF', symObjAddr: 0xE0C, symBinAddr: 0x8E0C, symSize: 0x20C }
+ - { offsetInCU: 0x2D89, offset: 0x3170F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackC7triggeryyAA9NSCClientCF', symObjAddr: 0x106C, symBinAddr: 0x906C, symSize: 0x1EC }
+ - { offsetInCU: 0x2ED4, offset: 0x3185A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64Vvg', symObjAddr: 0x138C, symBinAddr: 0x938C, symSize: 0x18 }
+ - { offsetInCU: 0x2EF4, offset: 0x3187A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64Vvg', symObjAddr: 0x138C, symBinAddr: 0x938C, symSize: 0x18 }
+ - { offsetInCU: 0x2F0F, offset: 0x31895, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCACycfc', symObjAddr: 0x14B4, symBinAddr: 0x94B4, symSize: 0x2C }
+ - { offsetInCU: 0x2FE6, offset: 0x3196C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfC', symObjAddr: 0x1834, symBinAddr: 0x9834, symSize: 0x98 }
+ - { offsetInCU: 0x3001, offset: 0x31987, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfc', symObjAddr: 0x18CC, symBinAddr: 0x98CC, symSize: 0x240 }
+ - { offsetInCU: 0x3165, offset: 0x31AEB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfD', symObjAddr: 0x1BBC, symBinAddr: 0x9BBC, symSize: 0x44 }
+ - { offsetInCU: 0x31D1, offset: 0x31B57, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtF', symObjAddr: 0x1CE0, symBinAddr: 0x9CE0, symSize: 0x60 }
+ - { offsetInCU: 0x3272, offset: 0x31BF8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tF', symObjAddr: 0x1E10, symBinAddr: 0x9E10, symSize: 0x1C }
+ - { offsetInCU: 0x32DA, offset: 0x31C60, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tF', symObjAddr: 0x1F90, symBinAddr: 0x9F90, symSize: 0x1C }
+ - { offsetInCU: 0x3342, offset: 0x31CC8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9broadcastyySSF', symObjAddr: 0x1FC8, symBinAddr: 0x9FC8, symSize: 0x58 }
+ - { offsetInCU: 0x33C2, offset: 0x31D48, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF', symObjAddr: 0x20E0, symBinAddr: 0xA0E0, symSize: 0x18 }
+ - { offsetInCU: 0x33E2, offset: 0x31D68, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF', symObjAddr: 0x20E0, symBinAddr: 0xA0E0, symSize: 0x18 }
+ - { offsetInCU: 0x3413, offset: 0x31D99, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF', symObjAddr: 0x2240, symBinAddr: 0xA240, symSize: 0x18 }
+ - { offsetInCU: 0x3433, offset: 0x31DB9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF', symObjAddr: 0x2240, symBinAddr: 0xA240, symSize: 0x18 }
+ - { offsetInCU: 0x34BE, offset: 0x31E44, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcF', symObjAddr: 0x2270, symBinAddr: 0xA270, symSize: 0x13C }
+ - { offsetInCU: 0x35C6, offset: 0x31F4C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x23AC, symBinAddr: 0xA3AC, symSize: 0x154 }
+ - { offsetInCU: 0x3729, offset: 0x320AF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2500, symBinAddr: 0xA500, symSize: 0x4 }
+ - { offsetInCU: 0x37E0, offset: 0x32166, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF', symObjAddr: 0x2568, symBinAddr: 0xA568, symSize: 0x14C }
+ - { offsetInCU: 0x38E8, offset: 0x3226E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x26B4, symBinAddr: 0xA6B4, symSize: 0xDC }
+ - { offsetInCU: 0x39F7, offset: 0x3237D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2790, symBinAddr: 0xA790, symSize: 0x4 }
+ - { offsetInCU: 0x3A24, offset: 0x323AA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF', symObjAddr: 0x2888, symBinAddr: 0xA888, symSize: 0x13C }
+ - { offsetInCU: 0x3B2C, offset: 0x324B2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x29C4, symBinAddr: 0xA9C4, symSize: 0xDC }
+ - { offsetInCU: 0x3C3B, offset: 0x325C1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2AA0, symBinAddr: 0xAAA0, symSize: 0x4 }
+ - { offsetInCU: 0x3CAE, offset: 0x32634, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcF', symObjAddr: 0x2B08, symBinAddr: 0xAB08, symSize: 0x13C }
+ - { offsetInCU: 0x3DB6, offset: 0x3273C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcFyAF_SvSgtcfU_', symObjAddr: 0x2C44, symBinAddr: 0xAC44, symSize: 0x13C }
+ - { offsetInCU: 0x3EFE, offset: 0x32884, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcFyAF_SvSgtcfU_To', symObjAddr: 0x2D80, symBinAddr: 0xAD80, symSize: 0x4 }
+ - { offsetInCU: 0x3FAE, offset: 0x32934, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcF', symObjAddr: 0x2DE8, symBinAddr: 0xADE8, symSize: 0x13C }
+ - { offsetInCU: 0x40B6, offset: 0x32A3C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x2F24, symBinAddr: 0xAF24, symSize: 0x114 }
+ - { offsetInCU: 0x41E4, offset: 0x32B6A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x3038, symBinAddr: 0xB038, symSize: 0x4 }
+ - { offsetInCU: 0x421F, offset: 0x32BA5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VF', symObjAddr: 0x30BC, symBinAddr: 0xB0BC, symSize: 0xDC }
+ - { offsetInCU: 0x433F, offset: 0x32CC5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcF', symObjAddr: 0x3284, symBinAddr: 0xB284, symSize: 0x13C }
+ - { offsetInCU: 0x4447, offset: 0x32DCD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcFyAF_Spys4Int8VGSgSvSgtcfU_', symObjAddr: 0x33C0, symBinAddr: 0xB3C0, symSize: 0xE8 }
+ - { offsetInCU: 0x453D, offset: 0x32EC3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcFyAF_Spys4Int8VGSgSvSgtcfU_To', symObjAddr: 0x34A8, symBinAddr: 0xB4A8, symSize: 0x4 }
+ - { offsetInCU: 0x456A, offset: 0x32EF0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvg', symObjAddr: 0x3690, symBinAddr: 0xB690, symSize: 0x2C }
+ - { offsetInCU: 0x45F7, offset: 0x32F7D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgF', symObjAddr: 0x36BC, symBinAddr: 0xB6BC, symSize: 0xDC }
+ - { offsetInCU: 0x4750, offset: 0x330D6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFySo07CServerG0V_SvSgtcfU_', symObjAddr: 0x3798, symBinAddr: 0xB798, symSize: 0x11C }
+ - { offsetInCU: 0x4810, offset: 0x33196, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFySo07CServerG0V_SvSgtcfU_To', symObjAddr: 0x38C8, symBinAddr: 0xB8C8, symSize: 0x4 }
+ - { offsetInCU: 0x4880, offset: 0x33206, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcF', symObjAddr: 0x3958, symBinAddr: 0xB958, symSize: 0x90 }
+ - { offsetInCU: 0x4992, offset: 0x33318, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctF', symObjAddr: 0x3AC0, symBinAddr: 0xBAC0, symSize: 0xA0 }
+ - { offsetInCU: 0x4A46, offset: 0x333CC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctFySpys4Int8VGSg_SvSgtcfU_To', symObjAddr: 0x3BFC, symBinAddr: 0xBBFC, symSize: 0x14 }
+ - { offsetInCU: 0x4AD3, offset: 0x33459, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfC', symObjAddr: 0x3CF0, symBinAddr: 0xBCF0, symSize: 0x20 }
+ - { offsetInCU: 0x4AE7, offset: 0x3346D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfc', symObjAddr: 0x3D10, symBinAddr: 0xBD10, symSize: 0x2C }
+ - { offsetInCU: 0x4B4C, offset: 0x334D2, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSQSCSQ2eeoiySbx_xtFZTW', symObjAddr: 0x3DB0, symBinAddr: 0xBDB0, symSize: 0x4C }
+ - { offsetInCU: 0x4B68, offset: 0x334EE, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH9hashValueSivgTW', symObjAddr: 0x3E1C, symBinAddr: 0xBDFC, symSize: 0x3C }
+ - { offsetInCU: 0x4B84, offset: 0x3350A, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x3E58, symBinAddr: 0xBE38, symSize: 0x48 }
+ - { offsetInCU: 0x4BC2, offset: 0x33548, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFs6UInt64V_Tg5', symObjAddr: 0x3EF8, symBinAddr: 0xBED8, symSize: 0x30 }
+ - { offsetInCU: 0x4C00, offset: 0x33586, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFs6UInt64V_Tg5', symObjAddr: 0x3F28, symBinAddr: 0xBF08, symSize: 0x9C }
+ - { offsetInCU: 0x4C62, offset: 0x335E8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvgTf4n_g', symObjAddr: 0x486C, symBinAddr: 0xC84C, symSize: 0x58 }
+ - { offsetInCU: 0x89, offset: 0x33767, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x258, symBinAddr: 0xD5C8, symSize: 0x30 }
+ - { offsetInCU: 0xBB, offset: 0x33799, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x288, symBinAddr: 0xD5F8, symSize: 0x44 }
+ - { offsetInCU: 0xE8, offset: 0x337C6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfCTf4nd_n', symObjAddr: 0xF14, symBinAddr: 0xE284, symSize: 0x14 }
+ - { offsetInCU: 0x15F, offset: 0x3383D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TR', symObjAddr: 0x5C, symBinAddr: 0xD3CC, symSize: 0x14 }
+ - { offsetInCU: 0x173, offset: 0x33851, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TR', symObjAddr: 0x70, symBinAddr: 0xD3E0, symSize: 0x44 }
+ - { offsetInCU: 0x1E3, offset: 0x338C1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCACycfcTo', symObjAddr: 0x2CC, symBinAddr: 0xD63C, symSize: 0x2C }
+ - { offsetInCU: 0x281, offset: 0x3395F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCfETo', symObjAddr: 0x304, symBinAddr: 0xD674, symSize: 0x14 }
+ - { offsetInCU: 0x2D2, offset: 0x339B0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCACycfcTo', symObjAddr: 0x318, symBinAddr: 0xD688, symSize: 0x2C }
+ - { offsetInCU: 0x386, offset: 0x33A64, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCfETo', symObjAddr: 0x380, symBinAddr: 0xD6F0, symSize: 0x14 }
+ - { offsetInCU: 0x3D7, offset: 0x33AB5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvgTo', symObjAddr: 0x394, symBinAddr: 0xD704, symSize: 0x10 }
+ - { offsetInCU: 0x3F7, offset: 0x33AD5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvgTo', symObjAddr: 0x394, symBinAddr: 0xD704, symSize: 0x10 }
+ - { offsetInCU: 0x42D, offset: 0x33B0B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvsTo', symObjAddr: 0x3A4, symBinAddr: 0xD714, symSize: 0x10 }
+ - { offsetInCU: 0x44D, offset: 0x33B2B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvsTo', symObjAddr: 0x3A4, symBinAddr: 0xD714, symSize: 0x10 }
+ - { offsetInCU: 0x486, offset: 0x33B64, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvgTo', symObjAddr: 0x3B4, symBinAddr: 0xD724, symSize: 0x10 }
+ - { offsetInCU: 0x4A6, offset: 0x33B84, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvgTo', symObjAddr: 0x3B4, symBinAddr: 0xD724, symSize: 0x10 }
+ - { offsetInCU: 0x4DC, offset: 0x33BBA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvsTo', symObjAddr: 0x3C4, symBinAddr: 0xD734, symSize: 0x10 }
+ - { offsetInCU: 0x4FC, offset: 0x33BDA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvsTo', symObjAddr: 0x3C4, symBinAddr: 0xD734, symSize: 0x10 }
+ - { offsetInCU: 0x59B, offset: 0x33C79, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfcTo', symObjAddr: 0x6AC, symBinAddr: 0xDA1C, symSize: 0xF0 }
+ - { offsetInCU: 0x5CD, offset: 0x33CAB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCfDTo', symObjAddr: 0x7E0, symBinAddr: 0xDB50, symSize: 0x68 }
+ - { offsetInCU: 0x608, offset: 0x33CE6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6statusAA0D6StatusOvgTo', symObjAddr: 0x848, symBinAddr: 0xDBB8, symSize: 0x34 }
+ - { offsetInCU: 0x655, offset: 0x33D33, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFTo', symObjAddr: 0xA9C, symBinAddr: 0xDE0C, symSize: 0x8C }
+ - { offsetInCU: 0x68C, offset: 0x33D6A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC5startyyySSSgcFTo', symObjAddr: 0xBB0, symBinAddr: 0xDF20, symSize: 0xD0 }
+ - { offsetInCU: 0x75E, offset: 0x33E3C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctFTo', symObjAddr: 0xDC4, symBinAddr: 0xE134, symSize: 0xD8 }
+ - { offsetInCU: 0x83C, offset: 0x33F1A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfcTo', symObjAddr: 0xEE8, symBinAddr: 0xE258, symSize: 0x2C }
+ - { offsetInCU: 0x8A4, offset: 0x33F82, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCMa', symObjAddr: 0xF28, symBinAddr: 0xE298, symSize: 0x20 }
+ - { offsetInCU: 0x8B8, offset: 0x33F96, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCMa', symObjAddr: 0xF48, symBinAddr: 0xE2B8, symSize: 0x20 }
+ - { offsetInCU: 0x8CC, offset: 0x33FAA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCMa', symObjAddr: 0xF68, symBinAddr: 0xE2D8, symSize: 0x20 }
+ - { offsetInCU: 0x8E0, offset: 0x33FBE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASQWb', symObjAddr: 0xF88, symBinAddr: 0xE2F8, symSize: 0x4 }
+ - { offsetInCU: 0x8F4, offset: 0x33FD2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOACSQAAWl', symObjAddr: 0xF8C, symBinAddr: 0xE2FC, symSize: 0x44 }
+ - { offsetInCU: 0x908, offset: 0x33FE6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOMa', symObjAddr: 0xFD0, symBinAddr: 0xE340, symSize: 0x10 }
+ - { offsetInCU: 0x91C, offset: 0x33FFA, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TRTA', symObjAddr: 0x10A8, symBinAddr: 0xE418, symSize: 0x8 }
+ - { offsetInCU: 0x93B, offset: 0x34019, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TRTA', symObjAddr: 0x10C0, symBinAddr: 0xE420, symSize: 0x10 }
+ - { offsetInCU: 0x975, offset: 0x34053, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF15WebServerNative15NSCServerStatusO_Tgq5', symObjAddr: 0x0, symBinAddr: 0xD370, symSize: 0x5C }
+ - { offsetInCU: 0x9F6, offset: 0x340D4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x108, symBinAddr: 0xD478, symSize: 0xC }
+ - { offsetInCU: 0xA7C, offset: 0x3415A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH9hashValueSivgTW', symObjAddr: 0x114, symBinAddr: 0xD484, symSize: 0x78 }
+ - { offsetInCU: 0xB28, offset: 0x34206, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x18C, symBinAddr: 0xD4FC, symSize: 0x58 }
+ - { offsetInCU: 0xB98, offset: 0x34276, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x1E4, symBinAddr: 0xD554, symSize: 0x74 }
+ - { offsetInCU: 0xD6F, offset: 0x3444D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfC', symObjAddr: 0xB4, symBinAddr: 0xD424, symSize: 0x18 }
+ - { offsetInCU: 0xD83, offset: 0x34461, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueSivg', symObjAddr: 0xCC, symBinAddr: 0xD43C, symSize: 0x3C }
+ - { offsetInCU: 0xE7A, offset: 0x34558, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfC', symObjAddr: 0x3D4, symBinAddr: 0xD744, symSize: 0xA8 }
+ - { offsetInCU: 0xE95, offset: 0x34573, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfc', symObjAddr: 0x47C, symBinAddr: 0xD7EC, symSize: 0x230 }
+ - { offsetInCU: 0xFB6, offset: 0x34694, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCfD', symObjAddr: 0x79C, symBinAddr: 0xDB0C, symSize: 0x44 }
+ - { offsetInCU: 0x101F, offset: 0x346FD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6statusAA0D6StatusOvg', symObjAddr: 0x87C, symBinAddr: 0xDBEC, symSize: 0x2C }
+ - { offsetInCU: 0x10A5, offset: 0x34783, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgF', symObjAddr: 0x8A8, symBinAddr: 0xDC18, symSize: 0xD4 }
+ - { offsetInCU: 0x11F3, offset: 0x348D1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFySo07CServerF0V_SvSgtcfU_', symObjAddr: 0x97C, symBinAddr: 0xDCEC, symSize: 0x108 }
+ - { offsetInCU: 0x12AA, offset: 0x34988, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFySo07CServerF0V_SvSgtcfU_To', symObjAddr: 0xA98, symBinAddr: 0xDE08, symSize: 0x4 }
+ - { offsetInCU: 0x1315, offset: 0x349F3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC5startyyySSSgcF', symObjAddr: 0xB28, symBinAddr: 0xDE98, symSize: 0x88 }
+ - { offsetInCU: 0x141F, offset: 0x34AFD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctF', symObjAddr: 0xC80, symBinAddr: 0xDFF0, symSize: 0x98 }
+ - { offsetInCU: 0x14D1, offset: 0x34BAF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctFySpys4Int8VGSg_SvSgtcfU_To', symObjAddr: 0xDB0, symBinAddr: 0xE120, symSize: 0x14 }
+ - { offsetInCU: 0x1557, offset: 0x34C35, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfC', symObjAddr: 0xE9C, symBinAddr: 0xE20C, symSize: 0x20 }
+ - { offsetInCU: 0x156B, offset: 0x34C49, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfc', symObjAddr: 0xEBC, symBinAddr: 0xE22C, symSize: 0x2C }
+...
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/WebServerNative-Swift.h b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/WebServerNative-Swift.h
new file mode 100644
index 00000000..f64d6f55
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/WebServerNative-Swift.h
@@ -0,0 +1,790 @@
+#if 0
+#elif defined(__arm64__) && __arm64__
+// Generated by Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+#ifndef WEBSERVERNATIVE_SWIFT_H
+#define WEBSERVERNATIVE_SWIFT_H
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wgcc-compat"
+
+#if !defined(__has_include)
+# define __has_include(x) 0
+#endif
+#if !defined(__has_attribute)
+# define __has_attribute(x) 0
+#endif
+#if !defined(__has_feature)
+# define __has_feature(x) 0
+#endif
+#if !defined(__has_warning)
+# define __has_warning(x) 0
+#endif
+
+#if __has_include()
+# include
+#endif
+
+#pragma clang diagnostic ignored "-Wauto-import"
+#if defined(__OBJC__)
+#include
+#endif
+#if defined(__cplusplus)
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#else
+#include
+#include
+#include
+#include
+#endif
+#if defined(__cplusplus)
+#if defined(__arm64e__) && __has_include()
+# include
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
+# ifndef __ptrauth_swift_value_witness_function_pointer
+# define __ptrauth_swift_value_witness_function_pointer(x)
+# endif
+# ifndef __ptrauth_swift_class_method_pointer
+# define __ptrauth_swift_class_method_pointer(x)
+# endif
+#pragma clang diagnostic pop
+#endif
+#endif
+
+#if !defined(SWIFT_TYPEDEFS)
+# define SWIFT_TYPEDEFS 1
+# if __has_include()
+# include
+# elif !defined(__cplusplus)
+typedef uint_least16_t char16_t;
+typedef uint_least32_t char32_t;
+# endif
+typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
+typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
+typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
+typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
+typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
+typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
+typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
+typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
+typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
+typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
+typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
+typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
+#endif
+
+#if !defined(SWIFT_PASTE)
+# define SWIFT_PASTE_HELPER(x, y) x##y
+# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
+#endif
+#if !defined(SWIFT_METATYPE)
+# define SWIFT_METATYPE(X) Class
+#endif
+#if !defined(SWIFT_CLASS_PROPERTY)
+# if __has_feature(objc_class_property)
+# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
+# else
+# define SWIFT_CLASS_PROPERTY(...)
+# endif
+#endif
+#if !defined(SWIFT_RUNTIME_NAME)
+# if __has_attribute(objc_runtime_name)
+# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
+# else
+# define SWIFT_RUNTIME_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_COMPILE_NAME)
+# if __has_attribute(swift_name)
+# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
+# else
+# define SWIFT_COMPILE_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_METHOD_FAMILY)
+# if __has_attribute(objc_method_family)
+# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
+# else
+# define SWIFT_METHOD_FAMILY(X)
+# endif
+#endif
+#if !defined(SWIFT_NOESCAPE)
+# if __has_attribute(noescape)
+# define SWIFT_NOESCAPE __attribute__((noescape))
+# else
+# define SWIFT_NOESCAPE
+# endif
+#endif
+#if !defined(SWIFT_RELEASES_ARGUMENT)
+# if __has_attribute(ns_consumed)
+# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
+# else
+# define SWIFT_RELEASES_ARGUMENT
+# endif
+#endif
+#if !defined(SWIFT_WARN_UNUSED_RESULT)
+# if __has_attribute(warn_unused_result)
+# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+# else
+# define SWIFT_WARN_UNUSED_RESULT
+# endif
+#endif
+#if !defined(SWIFT_NORETURN)
+# if __has_attribute(noreturn)
+# define SWIFT_NORETURN __attribute__((noreturn))
+# else
+# define SWIFT_NORETURN
+# endif
+#endif
+#if !defined(SWIFT_CLASS_EXTRA)
+# define SWIFT_CLASS_EXTRA
+#endif
+#if !defined(SWIFT_PROTOCOL_EXTRA)
+# define SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_ENUM_EXTRA)
+# define SWIFT_ENUM_EXTRA
+#endif
+#if !defined(SWIFT_CLASS)
+# if __has_attribute(objc_subclassing_restricted)
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# else
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# endif
+#endif
+#if !defined(SWIFT_RESILIENT_CLASS)
+# if __has_attribute(objc_class_stub)
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# else
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# endif
+#endif
+#if !defined(SWIFT_PROTOCOL)
+# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_EXTENSION)
+# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
+#endif
+#if !defined(OBJC_DESIGNATED_INITIALIZER)
+# if __has_attribute(objc_designated_initializer)
+# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+# else
+# define OBJC_DESIGNATED_INITIALIZER
+# endif
+#endif
+#if !defined(SWIFT_ENUM_ATTR)
+# if __has_attribute(enum_extensibility)
+# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
+# else
+# define SWIFT_ENUM_ATTR(_extensibility)
+# endif
+#endif
+#if !defined(SWIFT_ENUM)
+# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# if __has_feature(generalized_swift_name)
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# else
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
+# endif
+#endif
+#if !defined(SWIFT_UNAVAILABLE)
+# define SWIFT_UNAVAILABLE __attribute__((unavailable))
+#endif
+#if !defined(SWIFT_UNAVAILABLE_MSG)
+# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
+#endif
+#if !defined(SWIFT_AVAILABILITY)
+# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
+#endif
+#if !defined(SWIFT_WEAK_IMPORT)
+# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
+#endif
+#if !defined(SWIFT_DEPRECATED)
+# define SWIFT_DEPRECATED __attribute__((deprecated))
+#endif
+#if !defined(SWIFT_DEPRECATED_MSG)
+# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
+#endif
+#if !defined(SWIFT_DEPRECATED_OBJC)
+# if __has_feature(attribute_diagnose_if_objc)
+# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
+# else
+# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
+# endif
+#endif
+#if defined(__OBJC__)
+#if !defined(IBSegueAction)
+# define IBSegueAction
+#endif
+#endif
+#if !defined(SWIFT_EXTERN)
+# if defined(__cplusplus)
+# define SWIFT_EXTERN extern "C"
+# else
+# define SWIFT_EXTERN extern
+# endif
+#endif
+#if !defined(SWIFT_CALL)
+# define SWIFT_CALL __attribute__((swiftcall))
+#endif
+#if !defined(SWIFT_INDIRECT_RESULT)
+# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
+#endif
+#if !defined(SWIFT_CONTEXT)
+# define SWIFT_CONTEXT __attribute__((swift_context))
+#endif
+#if !defined(SWIFT_ERROR_RESULT)
+# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
+#endif
+#if defined(__cplusplus)
+# define SWIFT_NOEXCEPT noexcept
+#else
+# define SWIFT_NOEXCEPT
+#endif
+#if !defined(SWIFT_C_INLINE_THUNK)
+# if __has_attribute(always_inline)
+# if __has_attribute(nodebug)
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
+# else
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
+# endif
+# else
+# define SWIFT_C_INLINE_THUNK inline
+# endif
+#endif
+#if defined(_WIN32)
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
+#endif
+#else
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL
+#endif
+#endif
+#if defined(__OBJC__)
+#if __has_feature(objc_modules)
+#if __has_warning("-Watimport-in-framework-header")
+#pragma clang diagnostic ignored "-Watimport-in-framework-header"
+#endif
+@import ObjectiveC;
+#endif
+
+#endif
+#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
+#pragma clang diagnostic ignored "-Wduplicate-method-arg"
+#if __has_warning("-Wpragma-clang-attribute")
+# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas"
+#pragma clang diagnostic ignored "-Wnullability"
+#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
+
+#if __has_attribute(external_source_symbol)
+# pragma push_macro("any")
+# undef any
+# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="WebServerNative",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
+# pragma pop_macro("any")
+#endif
+
+#if defined(__OBJC__)
+
+SWIFT_CLASS_NAMED("NSCClient")
+@interface NSCClient : NSObject
+@property (nonatomic, readonly) uint64_t id;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+enum NSCMessageType : NSInteger;
+@class NSString;
+@class NSData;
+
+SWIFT_CLASS_NAMED("NSCMessage")
+@interface NSCMessage : NSObject
+@property (nonatomic, readonly) enum NSCMessageType type;
+@property (nonatomic, readonly, copy) NSString * _Nullable text;
+@property (nonatomic, readonly, strong) NSData * _Nullable data;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+typedef SWIFT_ENUM_NAMED(NSInteger, NSCMessageType, "NSCMessageType", open) {
+ NSCMessageTypeText = 0,
+ NSCMessageTypeBinary = 1,
+ NSCMessageTypePing = 2,
+ NSCMessageTypePong = 3,
+};
+
+enum NSCServerStatus : NSInteger;
+
+SWIFT_CLASS_NAMED("NSCServer")
+@interface NSCServer : NSObject
+- (nonnull instancetype)init:(BOOL)logger :(NSString * _Nonnull)path :(NSString * _Nonnull)directory :(NSString * _Nullable)index :(NSString * _Nullable)hostName :(int16_t)port :(uint32_t)workers :(BOOL)showFiles OBJC_DESIGNATED_INITIALIZER;
+@property (nonatomic, readonly) enum NSCServerStatus status;
+- (void)setStatusChangeCallback:(void (^ _Nullable)(enum NSCServerStatus))callback;
+- (void)start:(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (void)stop:(BOOL)wait :(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+typedef SWIFT_ENUM_NAMED(NSInteger, NSCServerStatus, "NSCServerStatus", open) {
+ NSCServerStatusInactive = 0,
+ NSCServerStatusActive = 1,
+ NSCServerStatusCrashed = 2,
+ NSCServerStatusStarting = 3,
+ NSCServerStatusStopping = 4,
+};
+
+
+SWIFT_CLASS_NAMED("NSCWebSocketServer")
+@interface NSCWebSocketServer : NSObject
+- (nonnull instancetype)init:(BOOL)logger :(NSString * _Nonnull)path :(NSInteger)maxPayload :(NSString * _Nullable)hostName :(int16_t)port :(uint32_t)workers :(BOOL)autoPong OBJC_DESIGNATED_INITIALIZER;
+- (void)sendWithText:(NSString * _Nonnull)text id:(uint64_t)id;
+- (void)sendWithBinary:(NSData * _Nonnull)binary id:(uint64_t)id;
+- (void)sendWithPing:(NSData * _Nonnull)ping id:(uint64_t)id;
+- (void)sendEmptyPingWithId:(uint64_t)id;
+- (void)sendWithPong:(NSData * _Nonnull)pong id:(uint64_t)id;
+- (void)sendEmptyPongWithId:(uint64_t)id;
+- (void)broadcast:(NSString * _Nonnull)text;
+- (void)broadcastWithBinary:(NSData * _Nonnull)binary;
+- (void)broadcastWithPing:(NSData * _Nonnull)ping;
+- (void)broadcastEmptyPing;
+- (void)broadcastWithPong:(NSData * _Nonnull)pong;
+- (void)broadcastEmptyPong;
+- (uint64_t)addOnMessage:(void (^ _Nonnull)(NSCClient * _Nonnull, NSCMessage * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnMessage:(uint64_t)id;
+- (uint64_t)addOnPing:(void (^ _Nonnull)(NSCClient * _Nonnull, NSData * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnPing:(uint64_t)id;
+- (uint64_t)addOnPong:(void (^ _Nonnull)(NSCClient * _Nonnull, NSData * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnPong:(uint64_t)id;
+- (uint64_t)addOnConnect:(void (^ _Nonnull)(NSCClient * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnConnect:(uint64_t)id;
+- (uint64_t)addOnDisconnect:(void (^ _Nonnull)(NSCClient * _Nonnull, uint16_t, NSString * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnDisconnect:(uint64_t)id;
+- (uint64_t)addOnError:(void (^ _Nonnull)(NSCClient * _Nonnull, NSString * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnError:(uint64_t)id;
+@property (nonatomic, readonly) enum NSCServerStatus status;
+- (void)setStatusChangeCallback:(void (^ _Nullable)(enum NSCServerStatus))callback;
+- (void)start:(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (void)stop:(BOOL)wait :(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+#endif
+#if __has_attribute(external_source_symbol)
+# pragma clang attribute pop
+#endif
+#if defined(__cplusplus)
+#endif
+#pragma clang diagnostic pop
+#endif
+
+#elif defined(__x86_64__) && __x86_64__
+// Generated by Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+#ifndef WEBSERVERNATIVE_SWIFT_H
+#define WEBSERVERNATIVE_SWIFT_H
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wgcc-compat"
+
+#if !defined(__has_include)
+# define __has_include(x) 0
+#endif
+#if !defined(__has_attribute)
+# define __has_attribute(x) 0
+#endif
+#if !defined(__has_feature)
+# define __has_feature(x) 0
+#endif
+#if !defined(__has_warning)
+# define __has_warning(x) 0
+#endif
+
+#if __has_include()
+# include
+#endif
+
+#pragma clang diagnostic ignored "-Wauto-import"
+#if defined(__OBJC__)
+#include
+#endif
+#if defined(__cplusplus)
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#else
+#include
+#include
+#include
+#include
+#endif
+#if defined(__cplusplus)
+#if defined(__arm64e__) && __has_include()
+# include
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
+# ifndef __ptrauth_swift_value_witness_function_pointer
+# define __ptrauth_swift_value_witness_function_pointer(x)
+# endif
+# ifndef __ptrauth_swift_class_method_pointer
+# define __ptrauth_swift_class_method_pointer(x)
+# endif
+#pragma clang diagnostic pop
+#endif
+#endif
+
+#if !defined(SWIFT_TYPEDEFS)
+# define SWIFT_TYPEDEFS 1
+# if __has_include()
+# include
+# elif !defined(__cplusplus)
+typedef uint_least16_t char16_t;
+typedef uint_least32_t char32_t;
+# endif
+typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
+typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
+typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
+typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
+typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
+typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
+typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
+typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
+typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
+typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
+typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
+typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
+#endif
+
+#if !defined(SWIFT_PASTE)
+# define SWIFT_PASTE_HELPER(x, y) x##y
+# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
+#endif
+#if !defined(SWIFT_METATYPE)
+# define SWIFT_METATYPE(X) Class
+#endif
+#if !defined(SWIFT_CLASS_PROPERTY)
+# if __has_feature(objc_class_property)
+# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
+# else
+# define SWIFT_CLASS_PROPERTY(...)
+# endif
+#endif
+#if !defined(SWIFT_RUNTIME_NAME)
+# if __has_attribute(objc_runtime_name)
+# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
+# else
+# define SWIFT_RUNTIME_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_COMPILE_NAME)
+# if __has_attribute(swift_name)
+# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
+# else
+# define SWIFT_COMPILE_NAME(X)
+# endif
+#endif
+#if !defined(SWIFT_METHOD_FAMILY)
+# if __has_attribute(objc_method_family)
+# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
+# else
+# define SWIFT_METHOD_FAMILY(X)
+# endif
+#endif
+#if !defined(SWIFT_NOESCAPE)
+# if __has_attribute(noescape)
+# define SWIFT_NOESCAPE __attribute__((noescape))
+# else
+# define SWIFT_NOESCAPE
+# endif
+#endif
+#if !defined(SWIFT_RELEASES_ARGUMENT)
+# if __has_attribute(ns_consumed)
+# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
+# else
+# define SWIFT_RELEASES_ARGUMENT
+# endif
+#endif
+#if !defined(SWIFT_WARN_UNUSED_RESULT)
+# if __has_attribute(warn_unused_result)
+# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+# else
+# define SWIFT_WARN_UNUSED_RESULT
+# endif
+#endif
+#if !defined(SWIFT_NORETURN)
+# if __has_attribute(noreturn)
+# define SWIFT_NORETURN __attribute__((noreturn))
+# else
+# define SWIFT_NORETURN
+# endif
+#endif
+#if !defined(SWIFT_CLASS_EXTRA)
+# define SWIFT_CLASS_EXTRA
+#endif
+#if !defined(SWIFT_PROTOCOL_EXTRA)
+# define SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_ENUM_EXTRA)
+# define SWIFT_ENUM_EXTRA
+#endif
+#if !defined(SWIFT_CLASS)
+# if __has_attribute(objc_subclassing_restricted)
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# else
+# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
+# endif
+#endif
+#if !defined(SWIFT_RESILIENT_CLASS)
+# if __has_attribute(objc_class_stub)
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# else
+# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
+# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
+# endif
+#endif
+#if !defined(SWIFT_PROTOCOL)
+# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
+#endif
+#if !defined(SWIFT_EXTENSION)
+# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
+#endif
+#if !defined(OBJC_DESIGNATED_INITIALIZER)
+# if __has_attribute(objc_designated_initializer)
+# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+# else
+# define OBJC_DESIGNATED_INITIALIZER
+# endif
+#endif
+#if !defined(SWIFT_ENUM_ATTR)
+# if __has_attribute(enum_extensibility)
+# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
+# else
+# define SWIFT_ENUM_ATTR(_extensibility)
+# endif
+#endif
+#if !defined(SWIFT_ENUM)
+# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# if __has_feature(generalized_swift_name)
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
+# else
+# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
+# endif
+#endif
+#if !defined(SWIFT_UNAVAILABLE)
+# define SWIFT_UNAVAILABLE __attribute__((unavailable))
+#endif
+#if !defined(SWIFT_UNAVAILABLE_MSG)
+# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
+#endif
+#if !defined(SWIFT_AVAILABILITY)
+# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
+#endif
+#if !defined(SWIFT_WEAK_IMPORT)
+# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
+#endif
+#if !defined(SWIFT_DEPRECATED)
+# define SWIFT_DEPRECATED __attribute__((deprecated))
+#endif
+#if !defined(SWIFT_DEPRECATED_MSG)
+# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
+#endif
+#if !defined(SWIFT_DEPRECATED_OBJC)
+# if __has_feature(attribute_diagnose_if_objc)
+# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
+# else
+# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
+# endif
+#endif
+#if defined(__OBJC__)
+#if !defined(IBSegueAction)
+# define IBSegueAction
+#endif
+#endif
+#if !defined(SWIFT_EXTERN)
+# if defined(__cplusplus)
+# define SWIFT_EXTERN extern "C"
+# else
+# define SWIFT_EXTERN extern
+# endif
+#endif
+#if !defined(SWIFT_CALL)
+# define SWIFT_CALL __attribute__((swiftcall))
+#endif
+#if !defined(SWIFT_INDIRECT_RESULT)
+# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
+#endif
+#if !defined(SWIFT_CONTEXT)
+# define SWIFT_CONTEXT __attribute__((swift_context))
+#endif
+#if !defined(SWIFT_ERROR_RESULT)
+# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
+#endif
+#if defined(__cplusplus)
+# define SWIFT_NOEXCEPT noexcept
+#else
+# define SWIFT_NOEXCEPT
+#endif
+#if !defined(SWIFT_C_INLINE_THUNK)
+# if __has_attribute(always_inline)
+# if __has_attribute(nodebug)
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
+# else
+# define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
+# endif
+# else
+# define SWIFT_C_INLINE_THUNK inline
+# endif
+#endif
+#if defined(_WIN32)
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
+#endif
+#else
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL
+#endif
+#endif
+#if defined(__OBJC__)
+#if __has_feature(objc_modules)
+#if __has_warning("-Watimport-in-framework-header")
+#pragma clang diagnostic ignored "-Watimport-in-framework-header"
+#endif
+@import ObjectiveC;
+#endif
+
+#endif
+#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
+#pragma clang diagnostic ignored "-Wduplicate-method-arg"
+#if __has_warning("-Wpragma-clang-attribute")
+# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas"
+#pragma clang diagnostic ignored "-Wnullability"
+#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
+
+#if __has_attribute(external_source_symbol)
+# pragma push_macro("any")
+# undef any
+# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="WebServerNative",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
+# pragma pop_macro("any")
+#endif
+
+#if defined(__OBJC__)
+
+SWIFT_CLASS_NAMED("NSCClient")
+@interface NSCClient : NSObject
+@property (nonatomic, readonly) uint64_t id;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+enum NSCMessageType : NSInteger;
+@class NSString;
+@class NSData;
+
+SWIFT_CLASS_NAMED("NSCMessage")
+@interface NSCMessage : NSObject
+@property (nonatomic, readonly) enum NSCMessageType type;
+@property (nonatomic, readonly, copy) NSString * _Nullable text;
+@property (nonatomic, readonly, strong) NSData * _Nullable data;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+typedef SWIFT_ENUM_NAMED(NSInteger, NSCMessageType, "NSCMessageType", open) {
+ NSCMessageTypeText = 0,
+ NSCMessageTypeBinary = 1,
+ NSCMessageTypePing = 2,
+ NSCMessageTypePong = 3,
+};
+
+enum NSCServerStatus : NSInteger;
+
+SWIFT_CLASS_NAMED("NSCServer")
+@interface NSCServer : NSObject
+- (nonnull instancetype)init:(BOOL)logger :(NSString * _Nonnull)path :(NSString * _Nonnull)directory :(NSString * _Nullable)index :(NSString * _Nullable)hostName :(int16_t)port :(uint32_t)workers :(BOOL)showFiles OBJC_DESIGNATED_INITIALIZER;
+@property (nonatomic, readonly) enum NSCServerStatus status;
+- (void)setStatusChangeCallback:(void (^ _Nullable)(enum NSCServerStatus))callback;
+- (void)start:(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (void)stop:(BOOL)wait :(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+typedef SWIFT_ENUM_NAMED(NSInteger, NSCServerStatus, "NSCServerStatus", open) {
+ NSCServerStatusInactive = 0,
+ NSCServerStatusActive = 1,
+ NSCServerStatusCrashed = 2,
+ NSCServerStatusStarting = 3,
+ NSCServerStatusStopping = 4,
+};
+
+
+SWIFT_CLASS_NAMED("NSCWebSocketServer")
+@interface NSCWebSocketServer : NSObject
+- (nonnull instancetype)init:(BOOL)logger :(NSString * _Nonnull)path :(NSInteger)maxPayload :(NSString * _Nullable)hostName :(int16_t)port :(uint32_t)workers :(BOOL)autoPong OBJC_DESIGNATED_INITIALIZER;
+- (void)sendWithText:(NSString * _Nonnull)text id:(uint64_t)id;
+- (void)sendWithBinary:(NSData * _Nonnull)binary id:(uint64_t)id;
+- (void)sendWithPing:(NSData * _Nonnull)ping id:(uint64_t)id;
+- (void)sendEmptyPingWithId:(uint64_t)id;
+- (void)sendWithPong:(NSData * _Nonnull)pong id:(uint64_t)id;
+- (void)sendEmptyPongWithId:(uint64_t)id;
+- (void)broadcast:(NSString * _Nonnull)text;
+- (void)broadcastWithBinary:(NSData * _Nonnull)binary;
+- (void)broadcastWithPing:(NSData * _Nonnull)ping;
+- (void)broadcastEmptyPing;
+- (void)broadcastWithPong:(NSData * _Nonnull)pong;
+- (void)broadcastEmptyPong;
+- (uint64_t)addOnMessage:(void (^ _Nonnull)(NSCClient * _Nonnull, NSCMessage * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnMessage:(uint64_t)id;
+- (uint64_t)addOnPing:(void (^ _Nonnull)(NSCClient * _Nonnull, NSData * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnPing:(uint64_t)id;
+- (uint64_t)addOnPong:(void (^ _Nonnull)(NSCClient * _Nonnull, NSData * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnPong:(uint64_t)id;
+- (uint64_t)addOnConnect:(void (^ _Nonnull)(NSCClient * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnConnect:(uint64_t)id;
+- (uint64_t)addOnDisconnect:(void (^ _Nonnull)(NSCClient * _Nonnull, uint16_t, NSString * _Nullable))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnDisconnect:(uint64_t)id;
+- (uint64_t)addOnError:(void (^ _Nonnull)(NSCClient * _Nonnull, NSString * _Nonnull))callback SWIFT_WARN_UNUSED_RESULT;
+- (void)removeOnError:(uint64_t)id;
+@property (nonatomic, readonly) enum NSCServerStatus status;
+- (void)setStatusChangeCallback:(void (^ _Nullable)(enum NSCServerStatus))callback;
+- (void)start:(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (void)stop:(BOOL)wait :(void (^ _Nonnull)(NSString * _Nullable))callback;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+#endif
+#if __has_attribute(external_source_symbol)
+# pragma clang attribute pop
+#endif
+#if defined(__cplusplus)
+#endif
+#pragma clang diagnostic pop
+#endif
+
+#else
+#error unsupported Swift architecture
+#endif
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/WebServerNative.h b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/WebServerNative.h
new file mode 100644
index 00000000..1a0158ba
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/WebServerNative.h
@@ -0,0 +1,25 @@
+//
+// WebServerNative.h
+// WebServerNative
+//
+// Created by Osei Fortune on 20/10/2024.
+//
+
+//#ifdef __cplusplus
+//extern "C" {
+//#endif
+
+#import
+#import "web_server_native.h"
+//! Project version number for WebServerNative.
+FOUNDATION_EXPORT double WebServerNativeVersionNumber;
+
+//! Project version string for WebServerNative.
+FOUNDATION_EXPORT const unsigned char WebServerNativeVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import
+
+//
+//#ifdef __cplusplus
+//}
+//#endif
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/web_server_native.h b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/web_server_native.h
new file mode 100644
index 00000000..bc57708e
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Headers/web_server_native.h
@@ -0,0 +1,198 @@
+#ifndef WEBSERVER_C_H
+#define WEBSERVER_C_H
+
+/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */
+
+#include
+#include
+#include
+#include
+
+typedef enum CServerStatus {
+ CServerStatus_Inactive,
+ CServerStatus_Active,
+ CServerStatus_Crashed,
+ CServerStatus_Starting,
+ CServerStatus_Stopping,
+} CServerStatus;
+
+typedef enum CWebsocketServerStatus {
+ CWebsocketServerStatus_Inactive,
+ CWebsocketServerStatus_Active,
+ CWebsocketServerStatus_Crashed,
+ CWebsocketServerStatus_Starting,
+ CWebsocketServerStatus_Stopping,
+} CWebsocketServerStatus;
+
+typedef enum WebsocketMessageType {
+ WebsocketMessageType_Text,
+ WebsocketMessageType_Binary,
+ WebsocketMessageType_Ping,
+ WebsocketMessageType_Pong,
+} WebsocketMessageType;
+
+typedef struct CClient CClient;
+
+typedef struct CServer CServer;
+
+typedef struct CWebsocketMessage CWebsocketMessage;
+
+typedef struct CWebsocketReason CWebsocketReason;
+
+typedef struct CWebsocketServer CWebsocketServer;
+
+typedef struct CStaticServiceOptions {
+ bool logger;
+ const char *path;
+ const char *directory;
+ const char *index;
+ const char *host_name;
+ int16_t port;
+ uint32_t workers;
+ bool show_files;
+} CStaticServiceOptions;
+
+typedef struct CWebSocketServiceOptions {
+ bool logger;
+ const char *path;
+ intptr_t max_payload;
+ const char *host_name;
+ int16_t port;
+ uint32_t workers;
+ bool auto_pong;
+} CWebSocketServiceOptions;
+
+struct CServer *webserver_init(const struct CStaticServiceOptions *options);
+
+void webserver_release(struct CServer *server);
+
+void webserver_start(struct CServer *server, void *data, void (*callback)(char*, void*));
+
+void webserver_stop(struct CServer *server, bool wait, void *data, void (*callback)(char*, void*));
+
+enum CServerStatus webserver_status(struct CServer *server);
+
+void webserver_error_release(char *error);
+
+void webserver_set_status_callback(struct CServer *server,
+ void *data,
+ void (*callback)(enum CServerStatus, void*));
+
+void webserver_clear_status_callback(struct CServer *server);
+
+struct CClient *webserver_websocket_client(struct CWebsocketServer *server, uint64_t client_id);
+
+uint64_t webserver_websocket_client_id(struct CClient *client);
+
+void webserver_websocket_client_release(struct CClient *client);
+
+struct CWebsocketServer *webserver_websocket_init(const struct CWebSocketServiceOptions *options);
+
+void webserver_websocket_release(struct CWebsocketServer *server);
+
+void webserver_websocket_start(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(char*, void*));
+
+void webserver_websocket_stop(struct CWebsocketServer *server,
+ bool wait,
+ void *data,
+ void (*callback)(char*, void*));
+
+enum CWebsocketServerStatus webserver_websocket_status(struct CWebsocketServer *server);
+
+void webserver_websocket_send_ping(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_ping(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_send_pong(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_pong(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_text(struct CWebsocketServer *server, const char *message);
+
+void webserver_websocket_send_text(struct CWebsocketServer *server,
+ uint64_t id,
+ const char *message);
+
+void webserver_websocket_send_binary(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_binary(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_set_status_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(enum CServerStatus, void*));
+
+void webserver_websocket_clear_status_callback(struct CWebsocketServer *server);
+
+void webserver_websocket_message_release(struct CWebsocketMessage *message);
+
+enum WebsocketMessageType webserver_websocket_message_type(struct CWebsocketMessage *message);
+
+const uint8_t *webserver_websocket_message_data(struct CWebsocketMessage *message);
+
+uintptr_t webserver_websocket_message_data_size(struct CWebsocketMessage *message);
+
+struct CWebsocketMessage *webserver_websocket_message_create_text(const char *text);
+
+struct CWebsocketMessage *webserver_websocket_message_create_ping(const uint8_t *data,
+ uintptr_t data_size);
+
+struct CWebsocketMessage *webserver_websocket_message_create_pong(const uint8_t *data,
+ uintptr_t data_size);
+
+struct CWebsocketMessage *webserver_websocket_message_create_binary(const uint8_t *data,
+ uintptr_t data_size);
+
+char *webserver_websocket_message_text(const struct CWebsocketMessage *message);
+
+uint16_t webserver_websocket_reason_code(const struct CWebsocketReason *reason);
+
+char *webserver_websocket_reason_description(const struct CWebsocketReason *reason);
+
+void webserver_websocket_reason_release(struct CWebsocketReason *reason);
+
+uint64_t webserver_websocket_add_connect_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t, void*));
+
+void webserver_websocket_remove_connect_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_disconnect_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t,
+ struct CWebsocketReason*,
+ void*));
+
+void webserver_websocket_remove_disconnect_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_message_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t,
+ struct CWebsocketMessage*,
+ void*));
+
+void webserver_websocket_remove_message_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_error_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t, char*, void*));
+
+void webserver_websocket_remove_error_callback(struct CWebsocketServer *server, uint64_t id);
+
+#endif /* WEBSERVER_C_H */
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Info.plist b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Info.plist
new file mode 100644
index 00000000..1a67a639
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Info.plist differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo
new file mode 100644
index 00000000..c568df54
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo
new file mode 100644
index 00000000..4d0766ec
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.abi.json b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.abi.json
new file mode 100644
index 00000000..4949df78
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.abi.json
@@ -0,0 +1,2810 @@
+{
+ "ABIRoot": {
+ "kind": "Root",
+ "name": "TopLevel",
+ "printedName": "TopLevel",
+ "children": [
+ {
+ "kind": "Import",
+ "name": "Foundation",
+ "printedName": "Foundation",
+ "declKind": "Import",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "RawDocComment"
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCMessageType",
+ "printedName": "NSCMessageType",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "Text",
+ "printedName": "Text",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypeText",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4TextyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 0
+ },
+ {
+ "kind": "Var",
+ "name": "Binary",
+ "printedName": "Binary",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypeBinary",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO6BinaryyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 1
+ },
+ {
+ "kind": "Var",
+ "name": "Ping",
+ "printedName": "Ping",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypePing",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4PingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 2
+ },
+ {
+ "kind": "Var",
+ "name": "Pong",
+ "printedName": "Pong",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypePong",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4PongyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 3
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(rawValue:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "WebServerNative.NSCMessageType?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfc",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "rawValue",
+ "printedName": "rawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueSivp",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueSivp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueSivg",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueSivg",
+ "moduleName": "WebServerNative",
+ "accessorKind": "get"
+ }
+ ]
+ }
+ ],
+ "declKind": "Enum",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCMessageType",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "enumRawTypeName": "Int",
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "RawRepresentable",
+ "printedName": "RawRepresentable",
+ "children": [
+ {
+ "kind": "TypeWitness",
+ "name": "RawValue",
+ "printedName": "RawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ]
+ }
+ ],
+ "usr": "s:SY",
+ "mangledName": "$sSY"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCMessage",
+ "printedName": "NSCMessage",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "type",
+ "printedName": "type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)type",
+ "mangledName": "$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "Final",
+ "HasStorage",
+ "AccessControl",
+ "ObjC"
+ ],
+ "isLet": true,
+ "hasStorage": true,
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)type",
+ "mangledName": "$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvg",
+ "moduleName": "WebServerNative",
+ "implicit": true,
+ "declAttributes": [
+ "Final",
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Var",
+ "name": "text",
+ "printedName": "text",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)text",
+ "mangledName": "$s15WebServerNative10NSCMessageC4textSSSgvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)text",
+ "mangledName": "$s15WebServerNative10NSCMessageC4textSSSgvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Var",
+ "name": "data",
+ "printedName": "data",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)data",
+ "mangledName": "$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)data",
+ "mangledName": "$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessage",
+ "printedName": "WebServerNative.NSCMessage",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)init",
+ "mangledName": "$s15WebServerNative10NSCMessageCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage",
+ "mangledName": "$s15WebServerNative10NSCMessageC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCMessage",
+ "declAttributes": [
+ "AccessControl",
+ "ObjCMembers",
+ "ObjC"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "hasMissingDesignatedInitializers": true,
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCClient",
+ "printedName": "NSCClient",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "id",
+ "printedName": "id",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(py)id",
+ "mangledName": "$s15WebServerNative9NSCClientC2ids6UInt64Vvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(im)id",
+ "mangledName": "$s15WebServerNative9NSCClientC2ids6UInt64Vvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(im)init",
+ "mangledName": "$s15WebServerNative9NSCClientCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient",
+ "mangledName": "$s15WebServerNative9NSCClientC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCClient",
+ "declAttributes": [
+ "AccessControl",
+ "ObjCMembers",
+ "ObjC"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "hasMissingDesignatedInitializers": true,
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCWebSocketServer",
+ "printedName": "NSCWebSocketServer",
+ "children": [
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(_:_:_:_:_:_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCWebSocketServer",
+ "printedName": "WebServerNative.NSCWebSocketServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int16",
+ "printedName": "Swift.Int16",
+ "usr": "s:s5Int16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt32",
+ "printedName": "Swift.UInt32",
+ "usr": "s:s6UInt32V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)init:::::::",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(text:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithText:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(binary:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithBinary:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send6binary2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(ping:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithPing:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4ping2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "sendEmptyPing",
+ "printedName": "sendEmptyPing(id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendEmptyPingWithId:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(pong:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithPong:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4pong2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "sendEmptyPong",
+ "printedName": "sendEmptyPong(id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendEmptyPongWithId:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcast:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcastyySSF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(binary:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithBinary:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast6binaryySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(ping:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast4pingySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcastEmptyPing",
+ "printedName": "broadcastEmptyPing()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastEmptyPing",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(pong:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast4pongySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcastEmptyPong",
+ "printedName": "broadcastEmptyPong()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastEmptyPong",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnMessage",
+ "printedName": "addOnMessage(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, WebServerNative.NSCMessage) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, WebServerNative.NSCMessage)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessage",
+ "printedName": "WebServerNative.NSCMessage",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnMessage:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnMessage",
+ "printedName": "removeOnMessage(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnMessage:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15removeOnMessageyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnPing",
+ "printedName": "addOnPing(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnPing",
+ "printedName": "removeOnPing(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12removeOnPingyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnPong",
+ "printedName": "addOnPong(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnPong",
+ "printedName": "removeOnPong(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12removeOnPongyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnConnect",
+ "printedName": "addOnConnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnConnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnConnect",
+ "printedName": "removeOnConnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnConnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15removeOnConnectyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnDisconnect",
+ "printedName": "addOnDisconnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Swift.UInt16, Swift.String?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt16",
+ "printedName": "Swift.UInt16",
+ "usr": "s:s6UInt16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnDisconnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnDisconnect",
+ "printedName": "removeOnDisconnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnDisconnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnError",
+ "printedName": "addOnError(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Swift.String) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Swift.String)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnError:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnError",
+ "printedName": "removeOnError(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnError:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13removeOnErroryys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Var",
+ "name": "status",
+ "printedName": "status",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(py)status",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)status",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Function",
+ "name": "setStatusChangeCallback",
+ "printedName": "setStatusChangeCallback(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "((WebServerNative.NSCServerStatus) -> ())?",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)setStatusChangeCallback:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "start",
+ "printedName": "start(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)start:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "stop",
+ "printedName": "stop(_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)stop::",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCWebSocketServer",
+ "printedName": "WebServerNative.NSCWebSocketServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)init",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0CACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCWebSocketServer",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC",
+ "ObjCMembers"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "Import",
+ "name": "Foundation",
+ "printedName": "Foundation",
+ "declKind": "Import",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "RawDocComment"
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCServerStatus",
+ "printedName": "NSCServerStatus",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "Inactive",
+ "printedName": "Inactive",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusInactive",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8InactiveyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 0
+ },
+ {
+ "kind": "Var",
+ "name": "Active",
+ "printedName": "Active",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusActive",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO6ActiveyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 1
+ },
+ {
+ "kind": "Var",
+ "name": "Crashed",
+ "printedName": "Crashed",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusCrashed",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO7CrashedyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 2
+ },
+ {
+ "kind": "Var",
+ "name": "Starting",
+ "printedName": "Starting",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusStarting",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8StartingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 3
+ },
+ {
+ "kind": "Var",
+ "name": "Stopping",
+ "printedName": "Stopping",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusStopping",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8StoppingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 4
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(rawValue:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "WebServerNative.NSCServerStatus?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfc",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "rawValue",
+ "printedName": "rawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueSivp",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueSivp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueSivg",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueSivg",
+ "moduleName": "WebServerNative",
+ "accessorKind": "get"
+ }
+ ]
+ }
+ ],
+ "declKind": "Enum",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCServerStatus",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "enumRawTypeName": "Int",
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "RawRepresentable",
+ "printedName": "RawRepresentable",
+ "children": [
+ {
+ "kind": "TypeWitness",
+ "name": "RawValue",
+ "printedName": "RawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ]
+ }
+ ],
+ "usr": "s:SY",
+ "mangledName": "$sSY"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCServer",
+ "printedName": "NSCServer",
+ "children": [
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(_:_:_:_:_:_:_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServer",
+ "printedName": "WebServerNative.NSCServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int16",
+ "printedName": "Swift.Int16",
+ "usr": "s:s5Int16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt32",
+ "printedName": "Swift.UInt32",
+ "usr": "s:s6UInt32V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)init::::::::",
+ "mangledName": "$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "status",
+ "printedName": "status",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(py)status",
+ "mangledName": "$s15WebServerNative9NSCServerC6statusAA0D6StatusOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)status",
+ "mangledName": "$s15WebServerNative9NSCServerC6statusAA0D6StatusOvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Function",
+ "name": "setStatusChangeCallback",
+ "printedName": "setStatusChangeCallback(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "((WebServerNative.NSCServerStatus) -> ())?",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)setStatusChangeCallback:",
+ "mangledName": "$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "start",
+ "printedName": "start(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)start:",
+ "mangledName": "$s15WebServerNative9NSCServerC5startyyySSSgcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "stop",
+ "printedName": "stop(_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)stop::",
+ "mangledName": "$s15WebServerNative9NSCServerC4stopyySb_ySSSgctF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServer",
+ "printedName": "WebServerNative.NSCServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)init",
+ "mangledName": "$s15WebServerNative9NSCServerCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer",
+ "mangledName": "$s15WebServerNative9NSCServerC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCServer",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC",
+ "ObjCMembers"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ }
+ ],
+ "json_format_version": 8
+ },
+ "ConstValues": [
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 255,
+ "length": 6,
+ "value": "1"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 271,
+ "length": 4,
+ "value": "2"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 285,
+ "length": 4,
+ "value": "3"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 869,
+ "length": 10,
+ "value": "\"WebServerNative.NSCMessage\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1809,
+ "length": 18,
+ "value": "\"WebServerNative.NSCMessageCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 2550,
+ "length": 17,
+ "value": "\"WebServerNative.NSCReasonCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 3337,
+ "length": 17,
+ "value": "\"WebServerNative.NSCStringCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 4056,
+ "length": 15,
+ "value": "\"WebServerNative.NSCDataCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 4777,
+ "length": 18,
+ "value": "\"WebServerNative.NSCConnectCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 5498,
+ "length": 9,
+ "value": "\"WebServerNative.NSCClient\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7544,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7604,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7658,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7718,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7780,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7837,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 7401,
+ "length": 18,
+ "value": "\"WebServerNative.NSCWebSocketServer\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 252,
+ "length": 6,
+ "value": "1"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 268,
+ "length": 7,
+ "value": "2"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 285,
+ "length": 8,
+ "value": "3"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 303,
+ "length": 8,
+ "value": "4"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1041,
+ "length": 11,
+ "value": "\"WebServerNative.NSCCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1199,
+ "length": 17,
+ "value": "\"WebServerNative.NSCStatusCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1417,
+ "length": 9,
+ "value": "\"WebServerNative.NSCServer\""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface
new file mode 100644
index 00000000..58d4f72d
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface
@@ -0,0 +1,96 @@
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+// swift-module-flags: -target arm64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name WebServerNative
+import Foundation
+import Swift
+@_exported import WebServerNative
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@objc(NSCMessageType) public enum NSCMessageType : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Text
+ case Binary
+ case Ping
+ case Pong
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCMessageType.RawValue {
+ get
+ }
+}
+@_hasMissingDesignatedInitializers @objc(NSCMessage) @objcMembers public class NSCMessage : ObjectiveC.NSObject {
+ @objc final public let type: WebServerNative.NSCMessageType
+ @objc public var text: Swift.String? {
+ @objc get
+ }
+ @objc public var data: Foundation.NSData? {
+ @objc get
+ }
+ @objc deinit
+}
+@_hasMissingDesignatedInitializers @objc(NSCClient) @objcMembers public class NSCClient : ObjectiveC.NSObject {
+ @objc public var id: Swift.UInt64 {
+ @objc get
+ }
+ @objc deinit
+}
+@objcMembers @objc(NSCWebSocketServer) public class NSCWebSocketServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ maxPayload: Swift.Int, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ autoPong: Swift.Bool)
+ @objc deinit
+ @objc public func send(text: Swift.String, id: Swift.UInt64)
+ @objc public func send(binary: Foundation.NSData, id: Swift.UInt64)
+ @objc public func send(ping: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPing(id: Swift.UInt64)
+ @objc public func send(pong: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPong(id: Swift.UInt64)
+ @objc public func broadcast(_ text: Swift.String)
+ @objc public func broadcast(binary: Foundation.NSData)
+ @objc public func broadcast(ping: Foundation.NSData)
+ @objc public func broadcastEmptyPing()
+ @objc public func broadcast(pong: Foundation.NSData)
+ @objc public func broadcastEmptyPong()
+ @objc public func addOnMessage(_ callback: @escaping (WebServerNative.NSCClient, WebServerNative.NSCMessage) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnMessage(_ id: Swift.UInt64)
+ @objc public func addOnPing(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPing(_ id: Swift.UInt64)
+ @objc public func addOnPong(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPong(_ id: Swift.UInt64)
+ @objc public func addOnConnect(_ callback: @escaping (WebServerNative.NSCClient) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnConnect(_ id: Swift.UInt64)
+ @objc public func addOnDisconnect(_ callback: @escaping (WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnDisconnect(_ id: Swift.UInt64)
+ @objc public func addOnError(_ callback: @escaping (WebServerNative.NSCClient, Swift.String) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnError(_ id: Swift.UInt64)
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+@objc(NSCServerStatus) public enum NSCServerStatus : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Inactive
+ case Active
+ case Crashed
+ case Starting
+ case Stopping
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCServerStatus.RawValue {
+ get
+ }
+}
+@objcMembers @objc(NSCServer) public class NSCServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ directory: Swift.String, _ index: Swift.String?, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ showFiles: Swift.Bool)
+ @objc deinit
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+extension WebServerNative.NSCMessageType : Swift.Equatable {}
+extension WebServerNative.NSCMessageType : Swift.Hashable {}
+extension WebServerNative.NSCServerStatus : Swift.Equatable {}
+extension WebServerNative.NSCServerStatus : Swift.Hashable {}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc
new file mode 100644
index 00000000..3b4825ca
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface
new file mode 100644
index 00000000..58d4f72d
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface
@@ -0,0 +1,96 @@
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+// swift-module-flags: -target arm64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name WebServerNative
+import Foundation
+import Swift
+@_exported import WebServerNative
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@objc(NSCMessageType) public enum NSCMessageType : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Text
+ case Binary
+ case Ping
+ case Pong
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCMessageType.RawValue {
+ get
+ }
+}
+@_hasMissingDesignatedInitializers @objc(NSCMessage) @objcMembers public class NSCMessage : ObjectiveC.NSObject {
+ @objc final public let type: WebServerNative.NSCMessageType
+ @objc public var text: Swift.String? {
+ @objc get
+ }
+ @objc public var data: Foundation.NSData? {
+ @objc get
+ }
+ @objc deinit
+}
+@_hasMissingDesignatedInitializers @objc(NSCClient) @objcMembers public class NSCClient : ObjectiveC.NSObject {
+ @objc public var id: Swift.UInt64 {
+ @objc get
+ }
+ @objc deinit
+}
+@objcMembers @objc(NSCWebSocketServer) public class NSCWebSocketServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ maxPayload: Swift.Int, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ autoPong: Swift.Bool)
+ @objc deinit
+ @objc public func send(text: Swift.String, id: Swift.UInt64)
+ @objc public func send(binary: Foundation.NSData, id: Swift.UInt64)
+ @objc public func send(ping: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPing(id: Swift.UInt64)
+ @objc public func send(pong: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPong(id: Swift.UInt64)
+ @objc public func broadcast(_ text: Swift.String)
+ @objc public func broadcast(binary: Foundation.NSData)
+ @objc public func broadcast(ping: Foundation.NSData)
+ @objc public func broadcastEmptyPing()
+ @objc public func broadcast(pong: Foundation.NSData)
+ @objc public func broadcastEmptyPong()
+ @objc public func addOnMessage(_ callback: @escaping (WebServerNative.NSCClient, WebServerNative.NSCMessage) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnMessage(_ id: Swift.UInt64)
+ @objc public func addOnPing(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPing(_ id: Swift.UInt64)
+ @objc public func addOnPong(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPong(_ id: Swift.UInt64)
+ @objc public func addOnConnect(_ callback: @escaping (WebServerNative.NSCClient) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnConnect(_ id: Swift.UInt64)
+ @objc public func addOnDisconnect(_ callback: @escaping (WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnDisconnect(_ id: Swift.UInt64)
+ @objc public func addOnError(_ callback: @escaping (WebServerNative.NSCClient, Swift.String) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnError(_ id: Swift.UInt64)
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+@objc(NSCServerStatus) public enum NSCServerStatus : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Inactive
+ case Active
+ case Crashed
+ case Starting
+ case Stopping
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCServerStatus.RawValue {
+ get
+ }
+}
+@objcMembers @objc(NSCServer) public class NSCServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ directory: Swift.String, _ index: Swift.String?, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ showFiles: Swift.Bool)
+ @objc deinit
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+extension WebServerNative.NSCMessageType : Swift.Equatable {}
+extension WebServerNative.NSCMessageType : Swift.Hashable {}
+extension WebServerNative.NSCServerStatus : Swift.Equatable {}
+extension WebServerNative.NSCServerStatus : Swift.Hashable {}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.abi.json b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.abi.json
new file mode 100644
index 00000000..4949df78
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.abi.json
@@ -0,0 +1,2810 @@
+{
+ "ABIRoot": {
+ "kind": "Root",
+ "name": "TopLevel",
+ "printedName": "TopLevel",
+ "children": [
+ {
+ "kind": "Import",
+ "name": "Foundation",
+ "printedName": "Foundation",
+ "declKind": "Import",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "RawDocComment"
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCMessageType",
+ "printedName": "NSCMessageType",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "Text",
+ "printedName": "Text",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypeText",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4TextyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 0
+ },
+ {
+ "kind": "Var",
+ "name": "Binary",
+ "printedName": "Binary",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypeBinary",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO6BinaryyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 1
+ },
+ {
+ "kind": "Var",
+ "name": "Ping",
+ "printedName": "Ping",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypePing",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4PingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 2
+ },
+ {
+ "kind": "Var",
+ "name": "Pong",
+ "printedName": "Pong",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCMessageType.Type) -> WebServerNative.NSCMessageType",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCMessageType.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType@NSCMessageTypePong",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO4PongyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 3
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(rawValue:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "WebServerNative.NSCMessageType?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfc",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "rawValue",
+ "printedName": "rawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueSivp",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueSivp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "s:15WebServerNative14NSCMessageTypeO8rawValueSivg",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO8rawValueSivg",
+ "moduleName": "WebServerNative",
+ "accessorKind": "get"
+ }
+ ]
+ }
+ ],
+ "declKind": "Enum",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType",
+ "mangledName": "$s15WebServerNative14NSCMessageTypeO",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCMessageType",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "enumRawTypeName": "Int",
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "RawRepresentable",
+ "printedName": "RawRepresentable",
+ "children": [
+ {
+ "kind": "TypeWitness",
+ "name": "RawValue",
+ "printedName": "RawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ]
+ }
+ ],
+ "usr": "s:SY",
+ "mangledName": "$sSY"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCMessage",
+ "printedName": "NSCMessage",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "type",
+ "printedName": "type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)type",
+ "mangledName": "$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "Final",
+ "HasStorage",
+ "AccessControl",
+ "ObjC"
+ ],
+ "isLet": true,
+ "hasStorage": true,
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessageType",
+ "printedName": "WebServerNative.NSCMessageType",
+ "usr": "c:@M@WebServerNative@E@NSCMessageType"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)type",
+ "mangledName": "$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvg",
+ "moduleName": "WebServerNative",
+ "implicit": true,
+ "declAttributes": [
+ "Final",
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Var",
+ "name": "text",
+ "printedName": "text",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)text",
+ "mangledName": "$s15WebServerNative10NSCMessageC4textSSSgvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)text",
+ "mangledName": "$s15WebServerNative10NSCMessageC4textSSSgvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Var",
+ "name": "data",
+ "printedName": "data",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(py)data",
+ "mangledName": "$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)data",
+ "mangledName": "$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessage",
+ "printedName": "WebServerNative.NSCMessage",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage(im)init",
+ "mangledName": "$s15WebServerNative10NSCMessageCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage",
+ "mangledName": "$s15WebServerNative10NSCMessageC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCMessage",
+ "declAttributes": [
+ "AccessControl",
+ "ObjCMembers",
+ "ObjC"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "hasMissingDesignatedInitializers": true,
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCClient",
+ "printedName": "NSCClient",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "id",
+ "printedName": "id",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(py)id",
+ "mangledName": "$s15WebServerNative9NSCClientC2ids6UInt64Vvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(im)id",
+ "mangledName": "$s15WebServerNative9NSCClientC2ids6UInt64Vvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient(im)init",
+ "mangledName": "$s15WebServerNative9NSCClientCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient",
+ "mangledName": "$s15WebServerNative9NSCClientC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCClient",
+ "declAttributes": [
+ "AccessControl",
+ "ObjCMembers",
+ "ObjC"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "hasMissingDesignatedInitializers": true,
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCWebSocketServer",
+ "printedName": "NSCWebSocketServer",
+ "children": [
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(_:_:_:_:_:_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCWebSocketServer",
+ "printedName": "WebServerNative.NSCWebSocketServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int16",
+ "printedName": "Swift.Int16",
+ "usr": "s:s5Int16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt32",
+ "printedName": "Swift.UInt32",
+ "usr": "s:s6UInt32V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)init:::::::",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(text:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithText:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(binary:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithBinary:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send6binary2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(ping:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithPing:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4ping2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "sendEmptyPing",
+ "printedName": "sendEmptyPing(id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendEmptyPingWithId:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "send",
+ "printedName": "send(pong:id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendWithPong:id:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4send4pong2idySo6NSDataC_s6UInt64VtF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "sendEmptyPong",
+ "printedName": "sendEmptyPong(id:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)sendEmptyPongWithId:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcast:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcastyySSF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(binary:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithBinary:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast6binaryySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(ping:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast4pingySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcastEmptyPing",
+ "printedName": "broadcastEmptyPing()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastEmptyPing",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcast",
+ "printedName": "broadcast(pong:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastWithPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9broadcast4pongySo6NSDataC_tF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "broadcastEmptyPong",
+ "printedName": "broadcastEmptyPong()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)broadcastEmptyPong",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnMessage",
+ "printedName": "addOnMessage(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, WebServerNative.NSCMessage) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, WebServerNative.NSCMessage)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCMessage",
+ "printedName": "WebServerNative.NSCMessage",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCMessage"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnMessage:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnMessage",
+ "printedName": "removeOnMessage(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnMessage:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15removeOnMessageyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnPing",
+ "printedName": "addOnPing(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnPing",
+ "printedName": "removeOnPing(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnPing:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12removeOnPingyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnPong",
+ "printedName": "addOnPong(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Foundation.NSData?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Foundation.NSData?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSData",
+ "printedName": "Foundation.NSData",
+ "usr": "c:objc(cs)NSData"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnPong",
+ "printedName": "removeOnPong(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnPong:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12removeOnPongyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnConnect",
+ "printedName": "addOnConnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnConnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnConnect",
+ "printedName": "removeOnConnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnConnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15removeOnConnectyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnDisconnect",
+ "printedName": "addOnDisconnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Swift.UInt16, Swift.String?)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt16",
+ "printedName": "Swift.UInt16",
+ "usr": "s:s6UInt16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnDisconnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnDisconnect",
+ "printedName": "removeOnDisconnect(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnDisconnect:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "addOnError",
+ "printedName": "addOnError(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCClient, Swift.String) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Tuple",
+ "printedName": "(WebServerNative.NSCClient, Swift.String)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCClient",
+ "printedName": "WebServerNative.NSCClient",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCClient"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)addOnError:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "removeOnError",
+ "printedName": "removeOnError(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt64",
+ "printedName": "Swift.UInt64",
+ "usr": "s:s6UInt64V"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)removeOnError:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C13removeOnErroryys6UInt64VF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Var",
+ "name": "status",
+ "printedName": "status",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(py)status",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)status",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Function",
+ "name": "setStatusChangeCallback",
+ "printedName": "setStatusChangeCallback(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "((WebServerNative.NSCServerStatus) -> ())?",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)setStatusChangeCallback:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "start",
+ "printedName": "start(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)start:",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "stop",
+ "printedName": "stop(_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)stop::",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCWebSocketServer",
+ "printedName": "WebServerNative.NSCWebSocketServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer(im)init",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0CACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCWebSocketServer",
+ "mangledName": "$s15WebServerNative012NSCWebSocketB0C",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCWebSocketServer",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC",
+ "ObjCMembers"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ },
+ {
+ "kind": "Import",
+ "name": "Foundation",
+ "printedName": "Foundation",
+ "declKind": "Import",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "RawDocComment"
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCServerStatus",
+ "printedName": "NSCServerStatus",
+ "children": [
+ {
+ "kind": "Var",
+ "name": "Inactive",
+ "printedName": "Inactive",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusInactive",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8InactiveyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 0
+ },
+ {
+ "kind": "Var",
+ "name": "Active",
+ "printedName": "Active",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusActive",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO6ActiveyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 1
+ },
+ {
+ "kind": "Var",
+ "name": "Crashed",
+ "printedName": "Crashed",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusCrashed",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO7CrashedyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 2
+ },
+ {
+ "kind": "Var",
+ "name": "Starting",
+ "printedName": "Starting",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusStarting",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8StartingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 3
+ },
+ {
+ "kind": "Var",
+ "name": "Stopping",
+ "printedName": "Stopping",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus.Type) -> WebServerNative.NSCServerStatus",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Metatype",
+ "printedName": "WebServerNative.NSCServerStatus.Type",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "declKind": "EnumElement",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus@NSCServerStatusStopping",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8StoppingyA2CmF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "fixedbinaryorder": 4
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(rawValue:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "WebServerNative.NSCServerStatus?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfc",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "rawValue",
+ "printedName": "rawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueSivp",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueSivp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "s:15WebServerNative15NSCServerStatusO8rawValueSivg",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO8rawValueSivg",
+ "moduleName": "WebServerNative",
+ "accessorKind": "get"
+ }
+ ]
+ }
+ ],
+ "declKind": "Enum",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus",
+ "mangledName": "$s15WebServerNative15NSCServerStatusO",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCServerStatus",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "enumRawTypeName": "Int",
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "RawRepresentable",
+ "printedName": "RawRepresentable",
+ "children": [
+ {
+ "kind": "TypeWitness",
+ "name": "RawValue",
+ "printedName": "RawValue",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Int",
+ "printedName": "Swift.Int",
+ "usr": "s:Si"
+ }
+ ]
+ }
+ ],
+ "usr": "s:SY",
+ "mangledName": "$sSY"
+ }
+ ]
+ },
+ {
+ "kind": "TypeDecl",
+ "name": "NSCServer",
+ "printedName": "NSCServer",
+ "children": [
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init(_:_:_:_:_:_:_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServer",
+ "printedName": "WebServerNative.NSCServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Int16",
+ "printedName": "Swift.Int16",
+ "usr": "s:s5Int16V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "UInt32",
+ "printedName": "Swift.UInt32",
+ "usr": "s:s6UInt32V"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)init::::::::",
+ "mangledName": "$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfc",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "init_kind": "Designated"
+ },
+ {
+ "kind": "Var",
+ "name": "status",
+ "printedName": "status",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Var",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(py)status",
+ "mangledName": "$s15WebServerNative9NSCServerC6statusAA0D6StatusOvp",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "accessors": [
+ {
+ "kind": "Accessor",
+ "name": "Get",
+ "printedName": "Get()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ],
+ "declKind": "Accessor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)status",
+ "mangledName": "$s15WebServerNative9NSCServerC6statusAA0D6StatusOvg",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "ObjC"
+ ],
+ "accessorKind": "get"
+ }
+ ]
+ },
+ {
+ "kind": "Function",
+ "name": "setStatusChangeCallback",
+ "printedName": "setStatusChangeCallback(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "((WebServerNative.NSCServerStatus) -> ())?",
+ "children": [
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(WebServerNative.NSCServerStatus) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServerStatus",
+ "printedName": "WebServerNative.NSCServerStatus",
+ "usr": "c:@M@WebServerNative@E@NSCServerStatus"
+ }
+ ]
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)setStatusChangeCallback:",
+ "mangledName": "$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "start",
+ "printedName": "start(_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)start:",
+ "mangledName": "$s15WebServerNative9NSCServerC5startyyySSSgcF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Function",
+ "name": "stop",
+ "printedName": "stop(_:_:)",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Bool",
+ "printedName": "Swift.Bool",
+ "usr": "s:Sb"
+ },
+ {
+ "kind": "TypeFunc",
+ "name": "Function",
+ "printedName": "(Swift.String?) -> ()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "Void",
+ "printedName": "()"
+ },
+ {
+ "kind": "TypeNominal",
+ "name": "Optional",
+ "printedName": "Swift.String?",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "String",
+ "printedName": "Swift.String",
+ "usr": "s:SS"
+ }
+ ],
+ "usr": "s:Sq"
+ }
+ ]
+ }
+ ],
+ "declKind": "Func",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)stop::",
+ "mangledName": "$s15WebServerNative9NSCServerC4stopyySb_ySSSgctF",
+ "moduleName": "WebServerNative",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC"
+ ],
+ "funcSelfKind": "NonMutating"
+ },
+ {
+ "kind": "Constructor",
+ "name": "init",
+ "printedName": "init()",
+ "children": [
+ {
+ "kind": "TypeNominal",
+ "name": "NSCServer",
+ "printedName": "WebServerNative.NSCServer",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer"
+ }
+ ],
+ "declKind": "Constructor",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer(im)init",
+ "mangledName": "$s15WebServerNative9NSCServerCACycfc",
+ "moduleName": "WebServerNative",
+ "overriding": true,
+ "implicit": true,
+ "objc_name": "init",
+ "declAttributes": [
+ "Dynamic",
+ "ObjC",
+ "Override"
+ ],
+ "init_kind": "Designated"
+ }
+ ],
+ "declKind": "Class",
+ "usr": "c:@M@WebServerNative@objc(cs)NSCServer",
+ "mangledName": "$s15WebServerNative9NSCServerC",
+ "moduleName": "WebServerNative",
+ "objc_name": "NSCServer",
+ "declAttributes": [
+ "AccessControl",
+ "ObjC",
+ "ObjCMembers"
+ ],
+ "superclassUsr": "c:objc(cs)NSObject",
+ "superclassNames": [
+ "ObjectiveC.NSObject"
+ ],
+ "conformances": [
+ {
+ "kind": "Conformance",
+ "name": "Equatable",
+ "printedName": "Equatable",
+ "usr": "s:SQ",
+ "mangledName": "$sSQ"
+ },
+ {
+ "kind": "Conformance",
+ "name": "Hashable",
+ "printedName": "Hashable",
+ "usr": "s:SH",
+ "mangledName": "$sSH"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CVarArg",
+ "printedName": "CVarArg",
+ "usr": "s:s7CVarArgP",
+ "mangledName": "$ss7CVarArgP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObservingPublishing",
+ "printedName": "_KeyValueCodingAndObservingPublishing",
+ "usr": "s:10Foundation37_KeyValueCodingAndObservingPublishingP",
+ "mangledName": "$s10Foundation37_KeyValueCodingAndObservingPublishingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "_KeyValueCodingAndObserving",
+ "printedName": "_KeyValueCodingAndObserving",
+ "usr": "s:10Foundation27_KeyValueCodingAndObservingP",
+ "mangledName": "$s10Foundation27_KeyValueCodingAndObservingP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomStringConvertible",
+ "printedName": "CustomStringConvertible",
+ "usr": "s:s23CustomStringConvertibleP",
+ "mangledName": "$ss23CustomStringConvertibleP"
+ },
+ {
+ "kind": "Conformance",
+ "name": "CustomDebugStringConvertible",
+ "printedName": "CustomDebugStringConvertible",
+ "usr": "s:s28CustomDebugStringConvertibleP",
+ "mangledName": "$ss28CustomDebugStringConvertibleP"
+ }
+ ]
+ }
+ ],
+ "json_format_version": 8
+ },
+ "ConstValues": [
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 255,
+ "length": 6,
+ "value": "1"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 271,
+ "length": 4,
+ "value": "2"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 285,
+ "length": 4,
+ "value": "3"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 869,
+ "length": 10,
+ "value": "\"WebServerNative.NSCMessage\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1809,
+ "length": 18,
+ "value": "\"WebServerNative.NSCMessageCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 2550,
+ "length": 17,
+ "value": "\"WebServerNative.NSCReasonCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 3337,
+ "length": 17,
+ "value": "\"WebServerNative.NSCStringCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 4056,
+ "length": 15,
+ "value": "\"WebServerNative.NSCDataCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 4777,
+ "length": 18,
+ "value": "\"WebServerNative.NSCConnectCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 5498,
+ "length": 9,
+ "value": "\"WebServerNative.NSCClient\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7544,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7604,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7658,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7718,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7780,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "Dictionary",
+ "offset": 7837,
+ "length": 3,
+ "value": "[]"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCWebSocketServer.swift",
+ "kind": "StringLiteral",
+ "offset": 7401,
+ "length": 18,
+ "value": "\"WebServerNative.NSCWebSocketServer\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 252,
+ "length": 6,
+ "value": "1"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 268,
+ "length": 7,
+ "value": "2"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 285,
+ "length": 8,
+ "value": "3"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "IntegerLiteral",
+ "offset": 303,
+ "length": 8,
+ "value": "4"
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1041,
+ "length": 11,
+ "value": "\"WebServerNative.NSCCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1199,
+ "length": 17,
+ "value": "\"WebServerNative.NSCStatusCallback\""
+ },
+ {
+ "filePath": "\/Users\/triniwiz\/Documents\/GitHub\/nstudio-nativescript-plugins\/packages\/nativescript-web-server\/src-native\/web-server-ios\/WebServerNative\/NSCServer.swift",
+ "kind": "StringLiteral",
+ "offset": 1417,
+ "length": 9,
+ "value": "\"WebServerNative.NSCServer\""
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface
new file mode 100644
index 00000000..2b72c5dc
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface
@@ -0,0 +1,96 @@
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+// swift-module-flags: -target x86_64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name WebServerNative
+import Foundation
+import Swift
+@_exported import WebServerNative
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@objc(NSCMessageType) public enum NSCMessageType : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Text
+ case Binary
+ case Ping
+ case Pong
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCMessageType.RawValue {
+ get
+ }
+}
+@_hasMissingDesignatedInitializers @objc(NSCMessage) @objcMembers public class NSCMessage : ObjectiveC.NSObject {
+ @objc final public let type: WebServerNative.NSCMessageType
+ @objc public var text: Swift.String? {
+ @objc get
+ }
+ @objc public var data: Foundation.NSData? {
+ @objc get
+ }
+ @objc deinit
+}
+@_hasMissingDesignatedInitializers @objc(NSCClient) @objcMembers public class NSCClient : ObjectiveC.NSObject {
+ @objc public var id: Swift.UInt64 {
+ @objc get
+ }
+ @objc deinit
+}
+@objcMembers @objc(NSCWebSocketServer) public class NSCWebSocketServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ maxPayload: Swift.Int, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ autoPong: Swift.Bool)
+ @objc deinit
+ @objc public func send(text: Swift.String, id: Swift.UInt64)
+ @objc public func send(binary: Foundation.NSData, id: Swift.UInt64)
+ @objc public func send(ping: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPing(id: Swift.UInt64)
+ @objc public func send(pong: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPong(id: Swift.UInt64)
+ @objc public func broadcast(_ text: Swift.String)
+ @objc public func broadcast(binary: Foundation.NSData)
+ @objc public func broadcast(ping: Foundation.NSData)
+ @objc public func broadcastEmptyPing()
+ @objc public func broadcast(pong: Foundation.NSData)
+ @objc public func broadcastEmptyPong()
+ @objc public func addOnMessage(_ callback: @escaping (WebServerNative.NSCClient, WebServerNative.NSCMessage) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnMessage(_ id: Swift.UInt64)
+ @objc public func addOnPing(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPing(_ id: Swift.UInt64)
+ @objc public func addOnPong(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPong(_ id: Swift.UInt64)
+ @objc public func addOnConnect(_ callback: @escaping (WebServerNative.NSCClient) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnConnect(_ id: Swift.UInt64)
+ @objc public func addOnDisconnect(_ callback: @escaping (WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnDisconnect(_ id: Swift.UInt64)
+ @objc public func addOnError(_ callback: @escaping (WebServerNative.NSCClient, Swift.String) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnError(_ id: Swift.UInt64)
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+@objc(NSCServerStatus) public enum NSCServerStatus : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Inactive
+ case Active
+ case Crashed
+ case Starting
+ case Stopping
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCServerStatus.RawValue {
+ get
+ }
+}
+@objcMembers @objc(NSCServer) public class NSCServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ directory: Swift.String, _ index: Swift.String?, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ showFiles: Swift.Bool)
+ @objc deinit
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+extension WebServerNative.NSCMessageType : Swift.Equatable {}
+extension WebServerNative.NSCMessageType : Swift.Hashable {}
+extension WebServerNative.NSCServerStatus : Swift.Equatable {}
+extension WebServerNative.NSCServerStatus : Swift.Hashable {}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc
new file mode 100644
index 00000000..3919c528
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface
new file mode 100644
index 00000000..2b72c5dc
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface
@@ -0,0 +1,96 @@
+// swift-interface-format-version: 1.0
+// swift-compiler-version: Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
+// swift-module-flags: -target x86_64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name WebServerNative
+import Foundation
+import Swift
+@_exported import WebServerNative
+import _Concurrency
+import _StringProcessing
+import _SwiftConcurrencyShims
+@objc(NSCMessageType) public enum NSCMessageType : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Text
+ case Binary
+ case Ping
+ case Pong
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCMessageType.RawValue {
+ get
+ }
+}
+@_hasMissingDesignatedInitializers @objc(NSCMessage) @objcMembers public class NSCMessage : ObjectiveC.NSObject {
+ @objc final public let type: WebServerNative.NSCMessageType
+ @objc public var text: Swift.String? {
+ @objc get
+ }
+ @objc public var data: Foundation.NSData? {
+ @objc get
+ }
+ @objc deinit
+}
+@_hasMissingDesignatedInitializers @objc(NSCClient) @objcMembers public class NSCClient : ObjectiveC.NSObject {
+ @objc public var id: Swift.UInt64 {
+ @objc get
+ }
+ @objc deinit
+}
+@objcMembers @objc(NSCWebSocketServer) public class NSCWebSocketServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ maxPayload: Swift.Int, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ autoPong: Swift.Bool)
+ @objc deinit
+ @objc public func send(text: Swift.String, id: Swift.UInt64)
+ @objc public func send(binary: Foundation.NSData, id: Swift.UInt64)
+ @objc public func send(ping: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPing(id: Swift.UInt64)
+ @objc public func send(pong: Foundation.NSData, id: Swift.UInt64)
+ @objc public func sendEmptyPong(id: Swift.UInt64)
+ @objc public func broadcast(_ text: Swift.String)
+ @objc public func broadcast(binary: Foundation.NSData)
+ @objc public func broadcast(ping: Foundation.NSData)
+ @objc public func broadcastEmptyPing()
+ @objc public func broadcast(pong: Foundation.NSData)
+ @objc public func broadcastEmptyPong()
+ @objc public func addOnMessage(_ callback: @escaping (WebServerNative.NSCClient, WebServerNative.NSCMessage) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnMessage(_ id: Swift.UInt64)
+ @objc public func addOnPing(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPing(_ id: Swift.UInt64)
+ @objc public func addOnPong(_ callback: @escaping (WebServerNative.NSCClient, Foundation.NSData?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnPong(_ id: Swift.UInt64)
+ @objc public func addOnConnect(_ callback: @escaping (WebServerNative.NSCClient) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnConnect(_ id: Swift.UInt64)
+ @objc public func addOnDisconnect(_ callback: @escaping (WebServerNative.NSCClient, Swift.UInt16, Swift.String?) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnDisconnect(_ id: Swift.UInt64)
+ @objc public func addOnError(_ callback: @escaping (WebServerNative.NSCClient, Swift.String) -> Swift.Void) -> Swift.UInt64
+ @objc public func removeOnError(_ id: Swift.UInt64)
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+@objc(NSCServerStatus) public enum NSCServerStatus : Swift.Int, Swift.RawRepresentable {
+ public typealias RawValue = Swift.Int
+ case Inactive
+ case Active
+ case Crashed
+ case Starting
+ case Stopping
+ public init?(rawValue: Swift.Int)
+ public var rawValue: WebServerNative.NSCServerStatus.RawValue {
+ get
+ }
+}
+@objcMembers @objc(NSCServer) public class NSCServer : ObjectiveC.NSObject {
+ @objc public init(_ logger: Swift.Bool, _ path: Swift.String, _ directory: Swift.String, _ index: Swift.String?, _ hostName: Swift.String?, _ port: Swift.Int16, _ workers: Swift.UInt32, _ showFiles: Swift.Bool)
+ @objc deinit
+ @objc public var status: WebServerNative.NSCServerStatus {
+ @objc get
+ }
+ @objc public func setStatusChangeCallback(_ callback: ((WebServerNative.NSCServerStatus) -> Swift.Void)?)
+ @objc public func start(_ callback: @escaping (Swift.String?) -> Swift.Void)
+ @objc public func stop(_ wait: Swift.Bool, _ callback: @escaping (Swift.String?) -> Swift.Void)
+}
+extension WebServerNative.NSCMessageType : Swift.Equatable {}
+extension WebServerNative.NSCMessageType : Swift.Hashable {}
+extension WebServerNative.NSCServerStatus : Swift.Equatable {}
+extension WebServerNative.NSCServerStatus : Swift.Hashable {}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/module.modulemap b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/module.modulemap
new file mode 100644
index 00000000..50ecc1d5
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/Modules/module.modulemap
@@ -0,0 +1,11 @@
+framework module WebServerNative {
+ umbrella header "WebServerNative.h"
+ export *
+
+ module * { export * }
+}
+
+module WebServerNative.Swift {
+ header "WebServerNative-Swift.h"
+ requires objc
+}
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/WebServerNative b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/WebServerNative
new file mode 100755
index 00000000..39ca1ef0
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/WebServerNative differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/_CodeSignature/CodeResources b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/_CodeSignature/CodeResources
new file mode 100644
index 00000000..7c736eed
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/WebServerNative.framework/_CodeSignature/CodeResources
@@ -0,0 +1,278 @@
+
+
+
+
+ files
+
+ Headers/WebServerNative-Swift.h
+
+ g7vRIozJ93vquJEBjUBhP9UEtJI=
+
+ Headers/WebServerNative.h
+
+ UPyYxOTFImwKsQvf0NCGiKqgAy0=
+
+ Headers/web_server_native.h
+
+ gj6whju1T37sZKhz8wQmTzjc32M=
+
+ Info.plist
+
+ 0wOLifBOWOkGvWqTna7ut+r6YXs=
+
+ Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo
+
+ xkmSEQwiU9sq6pww37cf4pe92yU=
+
+ Modules/WebServerNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo
+
+ /qsAbPDxidnKqJ3jDY5Qm5bYmtM=
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.abi.json
+
+ 066FTuT3wRSLrccaoh22bdQ1bwg=
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface
+
+ PYLJV9xNuNGlXT/UL8zPDVQV9vY=
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc
+
+ Ml8mbRN+X43Rf+/agQqp7L88cCg=
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface
+
+ PYLJV9xNuNGlXT/UL8zPDVQV9vY=
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftmodule
+
+ uo1+waoSI1lHgxsS2XO+4pEK4nM=
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.abi.json
+
+ 066FTuT3wRSLrccaoh22bdQ1bwg=
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface
+
+ s7tiuA6H8HN1kCoRV8E2QRa/pBw=
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc
+
+ RueXg6dUHPX6l6pLbH7fGQXJmNY=
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface
+
+ s7tiuA6H8HN1kCoRV8E2QRa/pBw=
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftmodule
+
+ cThehs4Fng7kv9e0E02vZSTHAyg=
+
+ Modules/module.modulemap
+
+ 0Yj5MdRD8Xn9DuZdASj8gahQgrc=
+
+
+ files2
+
+ Headers/WebServerNative-Swift.h
+
+ hash2
+
+ Ku2Pb5N8/fJBG+4zZb+YmfENu10UtA9Z4XrguP5TPPs=
+
+
+ Headers/WebServerNative.h
+
+ hash2
+
+ aOlZyPBD+7Qxjmaj6jOuGB8sqzixWhpRqW9JE/G8sCQ=
+
+
+ Headers/web_server_native.h
+
+ hash2
+
+ PcAlC4GLg5ql0TFAdQ726cUimLCx1fy6uTHb22aKayA=
+
+
+ Modules/WebServerNative.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo
+
+ hash2
+
+ mfawxSELNb8wrbHnHWz8iLTYM+Jd6VhMM6rI9ckdF/I=
+
+
+ Modules/WebServerNative.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo
+
+ hash2
+
+ 2FjXsd/dP+LPlqDPwVnuEye0ovxVxNZWe/6TFfJqmXc=
+
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.abi.json
+
+ hash2
+
+ OwJ+VfZuunCy696AZ2ksD0YlH2eTS3ccAB8aIZO0zZg=
+
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface
+
+ hash2
+
+ FRiJ1ajOvAHOUWv/or1KpELMBgk7JlR56gTPYkpQxhs=
+
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftdoc
+
+ hash2
+
+ otLAag1A9Ds/xw7A4wrKJU46Yi4Sjsr94gFtORHcS3w=
+
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftinterface
+
+ hash2
+
+ FRiJ1ajOvAHOUWv/or1KpELMBgk7JlR56gTPYkpQxhs=
+
+
+ Modules/WebServerNative.swiftmodule/arm64-apple-ios-simulator.swiftmodule
+
+ hash2
+
+ lJJuXQMmo8kw5uAfaeasdo3PYITK0kS9K6YE1rGlE6A=
+
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.abi.json
+
+ hash2
+
+ OwJ+VfZuunCy696AZ2ksD0YlH2eTS3ccAB8aIZO0zZg=
+
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface
+
+ hash2
+
+ Z0BAMzlzTlODm6emKLXluT3xTasEy/30+aXK4zJhiro=
+
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftdoc
+
+ hash2
+
+ MG78ZbMbTX0zItCZVm+bpQj16DNCwIACz+n40rTI0Wc=
+
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftinterface
+
+ hash2
+
+ Z0BAMzlzTlODm6emKLXluT3xTasEy/30+aXK4zJhiro=
+
+
+ Modules/WebServerNative.swiftmodule/x86_64-apple-ios-simulator.swiftmodule
+
+ hash2
+
+ 3tf/zSBbD5f9AzQO8kwcqnqr/2GXL3yDnTNBCgAnxoI=
+
+
+ Modules/module.modulemap
+
+ hash2
+
+ yXJ3zjkn7da4myLx0oWl2YG10xlSI7H6NxwqkZYWWYw=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Info.plist b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Info.plist
new file mode 100644
index 00000000..32051ae1
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleIdentifier
+ com.apple.xcode.dsym.io.nstudio.plugins.webserver.WebServerNative
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ dSYM
+ CFBundleSignature
+ ????
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/DWARF/WebServerNative b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/DWARF/WebServerNative
new file mode 100644
index 00000000..c52a1335
Binary files /dev/null and b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/DWARF/WebServerNative differ
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/aarch64/WebServerNative.yml b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/aarch64/WebServerNative.yml
new file mode 100644
index 00000000..8d213225
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/aarch64/WebServerNative.yml
@@ -0,0 +1,208 @@
+---
+triple: 'arm64-apple-darwin'
+binary-path: '/Users/triniwiz/Documents/GitHub/nstudio-nativescript-plugins/packages/nativescript-web-server/src-native/web-server-ios/dist/Release-iphonesimulator/WebServerNative.framework/WebServerNative'
+relocations:
+ - { offsetInCU: 0x34, offset: 0x2F04C, size: 0x8, addend: 0x0, symName: _WebServerNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x2267C0, symSize: 0x0 }
+ - { offsetInCU: 0x69, offset: 0x2F081, size: 0x8, addend: 0x0, symName: _WebServerNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x2267F8, symSize: 0x0 }
+ - { offsetInCU: 0x8D, offset: 0x2F124, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x1F4, symBinAddr: 0x160C, symSize: 0x30 }
+ - { offsetInCU: 0xBF, offset: 0x2F156, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x224, symBinAddr: 0x163C, symSize: 0x44 }
+ - { offsetInCU: 0xEC, offset: 0x2F183, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfCTf4nd_n', symObjAddr: 0x4858, symBinAddr: 0x5C50, symSize: 0x14 }
+ - { offsetInCU: 0x199, offset: 0x2F230, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvgTo', symObjAddr: 0x268, symBinAddr: 0x1680, symSize: 0x10 }
+ - { offsetInCU: 0x1B9, offset: 0x2F250, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvgTo', symObjAddr: 0x268, symBinAddr: 0x1680, symSize: 0x10 }
+ - { offsetInCU: 0x1EF, offset: 0x2F286, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvsTo', symObjAddr: 0x278, symBinAddr: 0x1690, symSize: 0x10 }
+ - { offsetInCU: 0x20F, offset: 0x2F2A6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvsTo', symObjAddr: 0x278, symBinAddr: 0x1690, symSize: 0x10 }
+ - { offsetInCU: 0x248, offset: 0x2F2DF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvgTo', symObjAddr: 0x288, symBinAddr: 0x16A0, symSize: 0x10 }
+ - { offsetInCU: 0x268, offset: 0x2F2FF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvgTo', symObjAddr: 0x288, symBinAddr: 0x16A0, symSize: 0x10 }
+ - { offsetInCU: 0x2A3, offset: 0x2F33A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7message4typeACs13OpaquePointerVSg_AA0D4TypeOtcfcTo', symObjAddr: 0x2A8, symBinAddr: 0x16C0, symSize: 0x74 }
+ - { offsetInCU: 0x306, offset: 0x2F39D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvgTo', symObjAddr: 0x31C, symBinAddr: 0x1734, symSize: 0x70 }
+ - { offsetInCU: 0x37F, offset: 0x2F416, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvgTo', symObjAddr: 0x3C0, symBinAddr: 0x17D8, symSize: 0x70 }
+ - { offsetInCU: 0x421, offset: 0x2F4B8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCACycfcTo', symObjAddr: 0x648, symBinAddr: 0x1A60, symSize: 0x2C }
+ - { offsetInCU: 0x4F0, offset: 0x2F587, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative23convertNSCMessageToDataySo6NSDataCSgAA0E0CF', symObjAddr: 0x488, symBinAddr: 0x18A0, symSize: 0x120 }
+ - { offsetInCU: 0x61E, offset: 0x2F6B5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCfETo', symObjAddr: 0x5E0, symBinAddr: 0x19F8, symSize: 0x3C }
+ - { offsetInCU: 0x6D1, offset: 0x2F768, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackCACycfcTo', symObjAddr: 0x8AC, symBinAddr: 0x1CC4, symSize: 0x2C }
+ - { offsetInCU: 0x7B6, offset: 0x2F84D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC6clientACs13OpaquePointerVSg_tcfcTo', symObjAddr: 0x132C, symBinAddr: 0x2744, symSize: 0x48 }
+ - { offsetInCU: 0x827, offset: 0x2F8BE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64VvgTo', symObjAddr: 0x1374, symBinAddr: 0x278C, symSize: 0x18 }
+ - { offsetInCU: 0x847, offset: 0x2F8DE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64VvgTo', symObjAddr: 0x1374, symBinAddr: 0x278C, symSize: 0x18 }
+ - { offsetInCU: 0x866, offset: 0x2F8FD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64VvgTo', symObjAddr: 0x1374, symBinAddr: 0x278C, symSize: 0x18 }
+ - { offsetInCU: 0x898, offset: 0x2F92F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCACycfcTo', symObjAddr: 0x14E0, symBinAddr: 0x28F8, symSize: 0x2C }
+ - { offsetInCU: 0x91B, offset: 0x2F9B2, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x880, symBinAddr: 0x1C98, symSize: 0x2C }
+ - { offsetInCU: 0x9A6, offset: 0x2FA3D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackCACycfcTo', symObjAddr: 0xB50, symBinAddr: 0x1F68, symSize: 0x2C }
+ - { offsetInCU: 0xAD2, offset: 0x2FB69, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackCACycfcTo', symObjAddr: 0xDB8, symBinAddr: 0x21D0, symSize: 0x2C }
+ - { offsetInCU: 0xBFE, offset: 0x2FC95, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackCACycfcTo', symObjAddr: 0x1018, symBinAddr: 0x2430, symSize: 0x2C }
+ - { offsetInCU: 0xD25, offset: 0x2FDBC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackCACycfcTo', symObjAddr: 0x1258, symBinAddr: 0x2670, symSize: 0x2C }
+ - { offsetInCU: 0xDE3, offset: 0x2FE7A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative20convertMessageToDataySo6NSDataCSgs13OpaquePointerVSgF', symObjAddr: 0x150C, symBinAddr: 0x2924, symSize: 0xFC }
+ - { offsetInCU: 0xEFF, offset: 0x2FF96, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvgTo', symObjAddr: 0x1608, symBinAddr: 0x2A20, symSize: 0x10 }
+ - { offsetInCU: 0xF1F, offset: 0x2FFB6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvgTo', symObjAddr: 0x1608, symBinAddr: 0x2A20, symSize: 0x10 }
+ - { offsetInCU: 0xF57, offset: 0x2FFEE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvsTo', symObjAddr: 0x1618, symBinAddr: 0x2A30, symSize: 0x10 }
+ - { offsetInCU: 0xF77, offset: 0x3000E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvsTo', symObjAddr: 0x1618, symBinAddr: 0x2A30, symSize: 0x10 }
+ - { offsetInCU: 0xFB2, offset: 0x30049, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvgTo', symObjAddr: 0x1628, symBinAddr: 0x2A40, symSize: 0x10 }
+ - { offsetInCU: 0xFD2, offset: 0x30069, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvgTo', symObjAddr: 0x1628, symBinAddr: 0x2A40, symSize: 0x10 }
+ - { offsetInCU: 0x100A, offset: 0x300A1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvsTo', symObjAddr: 0x1638, symBinAddr: 0x2A50, symSize: 0x10 }
+ - { offsetInCU: 0x102A, offset: 0x300C1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvsTo', symObjAddr: 0x1638, symBinAddr: 0x2A50, symSize: 0x10 }
+ - { offsetInCU: 0x10C2, offset: 0x30159, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfcTo', symObjAddr: 0x1B0C, symBinAddr: 0x2F24, symSize: 0xB0 }
+ - { offsetInCU: 0x10F5, offset: 0x3018C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfDTo', symObjAddr: 0x1C00, symBinAddr: 0x3018, symSize: 0x68 }
+ - { offsetInCU: 0x1152, offset: 0x301E9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtFTo', symObjAddr: 0x1D40, symBinAddr: 0x3158, symSize: 0xA0 }
+ - { offsetInCU: 0x11D0, offset: 0x30267, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tFTo', symObjAddr: 0x1E2C, symBinAddr: 0x3244, symSize: 0x1C }
+ - { offsetInCU: 0x1251, offset: 0x302E8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tFTo', symObjAddr: 0x1FAC, symBinAddr: 0x33C4, symSize: 0x1C }
+ - { offsetInCU: 0x12D2, offset: 0x30369, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9broadcastyySSFTo', symObjAddr: 0x2020, symBinAddr: 0x3438, symSize: 0x90 }
+ - { offsetInCU: 0x134B, offset: 0x303E2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyFTo', symObjAddr: 0x20F8, symBinAddr: 0x3510, symSize: 0x18 }
+ - { offsetInCU: 0x136B, offset: 0x30402, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyFTo', symObjAddr: 0x20F8, symBinAddr: 0x3510, symSize: 0x18 }
+ - { offsetInCU: 0x138B, offset: 0x30422, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyFTo', symObjAddr: 0x20F8, symBinAddr: 0x3510, symSize: 0x18 }
+ - { offsetInCU: 0x13BF, offset: 0x30456, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyFTo', symObjAddr: 0x2258, symBinAddr: 0x3670, symSize: 0x18 }
+ - { offsetInCU: 0x13DF, offset: 0x30476, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyFTo', symObjAddr: 0x2258, symBinAddr: 0x3670, symSize: 0x18 }
+ - { offsetInCU: 0x13FF, offset: 0x30496, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyFTo', symObjAddr: 0x2258, symBinAddr: 0x3670, symSize: 0x18 }
+ - { offsetInCU: 0x154E, offset: 0x305E5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VFTo', symObjAddr: 0x3198, symBinAddr: 0x45B0, symSize: 0xEC }
+ - { offsetInCU: 0x1626, offset: 0x306BD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvgTo', symObjAddr: 0x365C, symBinAddr: 0x4A74, symSize: 0x34 }
+ - { offsetInCU: 0x1675, offset: 0x3070C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFTo', symObjAddr: 0x38CC, symBinAddr: 0x4CE4, symSize: 0x8C }
+ - { offsetInCU: 0x16AD, offset: 0x30744, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcFTo', symObjAddr: 0x39E8, symBinAddr: 0x4E00, symSize: 0xD8 }
+ - { offsetInCU: 0x1783, offset: 0x3081A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctFTo', symObjAddr: 0x3C10, symBinAddr: 0x5028, symSize: 0xE0 }
+ - { offsetInCU: 0x1866, offset: 0x308FD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfcTo', symObjAddr: 0x3D3C, symBinAddr: 0x5154, symSize: 0x2C }
+ - { offsetInCU: 0x18D0, offset: 0x30967, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfETo', symObjAddr: 0x1C68, symBinAddr: 0x3080, symSize: 0x78 }
+ - { offsetInCU: 0x1911, offset: 0x309A8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCs6UInt16VSo8NSStringCSgIeyByyy_AcESSSgIeggyg_TR', symObjAddr: 0x3058, symBinAddr: 0x4470, symSize: 0x64 }
+ - { offsetInCU: 0x19CB, offset: 0x30A62, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3D68, symBinAddr: 0x5180, symSize: 0x48 }
+ - { offsetInCU: 0x1A3D, offset: 0x30AD4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCMa', symObjAddr: 0x48C4, symBinAddr: 0x5CBC, symSize: 0x20 }
+ - { offsetInCU: 0x1A51, offset: 0x30AE8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCMa', symObjAddr: 0x48E4, symBinAddr: 0x5CDC, symSize: 0x20 }
+ - { offsetInCU: 0x1A65, offset: 0x30AFC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CMa', symObjAddr: 0x49FC, symBinAddr: 0x5DF4, symSize: 0x20 }
+ - { offsetInCU: 0x1A79, offset: 0x30B10, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackCMa', symObjAddr: 0x4A1C, symBinAddr: 0x5E14, symSize: 0x20 }
+ - { offsetInCU: 0x1A8D, offset: 0x30B24, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackCMa', symObjAddr: 0x4A3C, symBinAddr: 0x5E34, symSize: 0x20 }
+ - { offsetInCU: 0x1AA1, offset: 0x30B38, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackCMa', symObjAddr: 0x4A5C, symBinAddr: 0x5E54, symSize: 0x20 }
+ - { offsetInCU: 0x1AB5, offset: 0x30B4C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackCMa', symObjAddr: 0x4A7C, symBinAddr: 0x5E74, symSize: 0x20 }
+ - { offsetInCU: 0x1AC9, offset: 0x30B60, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackCMa', symObjAddr: 0x4A9C, symBinAddr: 0x5E94, symSize: 0x20 }
+ - { offsetInCU: 0x1ADD, offset: 0x30B74, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASQWb', symObjAddr: 0x4ABC, symBinAddr: 0x5EB4, symSize: 0x4 }
+ - { offsetInCU: 0x1AF1, offset: 0x30B88, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOACSQAAWl', symObjAddr: 0x4AC0, symBinAddr: 0x5EB8, symSize: 0x44 }
+ - { offsetInCU: 0x1B05, offset: 0x30B9C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOMa', symObjAddr: 0x4B04, symBinAddr: 0x5EFC, symSize: 0x10 }
+ - { offsetInCU: 0x1B19, offset: 0x30BB0, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaMa', symObjAddr: 0x4EAC, symBinAddr: 0x62A4, symSize: 0x54 }
+ - { offsetInCU: 0x1B2D, offset: 0x30BC4, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSQWb', symObjAddr: 0x4F00, symBinAddr: 0x62F8, symSize: 0x24 }
+ - { offsetInCU: 0x1B41, offset: 0x30BD8, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefa14CoreFoundation9_CFObjectSCSHWb', symObjAddr: 0x4F24, symBinAddr: 0x631C, symSize: 0x24 }
+ - { offsetInCU: 0x1B55, offset: 0x30BEC, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TRTA', symObjAddr: 0x4F6C, symBinAddr: 0x6364, symSize: 0x8 }
+ - { offsetInCU: 0x1B69, offset: 0x30C00, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIegy_SgWOe', symObjAddr: 0x4F74, symBinAddr: 0x636C, symSize: 0x10 }
+ - { offsetInCU: 0x1B7D, offset: 0x30C14, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TRTA', symObjAddr: 0x4F84, symBinAddr: 0x637C, symSize: 0x8 }
+ - { offsetInCU: 0x1B9C, offset: 0x30C33, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCSo8NSStringCIeyByy_ACSSIeggg_TRTA', symObjAddr: 0x4F8C, symBinAddr: 0x6384, symSize: 0x50 }
+ - { offsetInCU: 0x1BC5, offset: 0x30C5C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCs6UInt16VSo8NSStringCSgIeyByyy_AcESSSgIeggyg_TRTA', symObjAddr: 0x4FDC, symBinAddr: 0x63D4, symSize: 0x8 }
+ - { offsetInCU: 0x1BE4, offset: 0x30C7B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCIeyBy_ACIegg_TRTA', symObjAddr: 0x4FE4, symBinAddr: 0x63DC, symSize: 0x10 }
+ - { offsetInCU: 0x1C18, offset: 0x30CAF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCSo6NSDataCSgIeyByy_AcFIeggg_TRTA', symObjAddr: 0x4FF4, symBinAddr: 0x63EC, symSize: 0x14 }
+ - { offsetInCU: 0x1C4C, offset: 0x30CE3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCAA10NSCMessageCIeyByy_AcEIeggg_TRTA', symObjAddr: 0x5008, symBinAddr: 0x6400, symSize: 0x14 }
+ - { offsetInCU: 0x1C75, offset: 0x30D0C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackC7triggeryyAA9NSCClientCFyycfU_TA', symObjAddr: 0x5048, symBinAddr: 0x6440, symSize: 0x48 }
+ - { offsetInCU: 0x1CD3, offset: 0x30D6A, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x5090, symBinAddr: 0x6488, symSize: 0x10 }
+ - { offsetInCU: 0x1CE7, offset: 0x30D7E, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x50A0, symBinAddr: 0x6498, symSize: 0x8 }
+ - { offsetInCU: 0x1CFB, offset: 0x30D92, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackC7triggeryyAA9NSCClientC_SStFyycfU_TA', symObjAddr: 0x512C, symBinAddr: 0x6524, symSize: 0x60 }
+ - { offsetInCU: 0x1D63, offset: 0x30DFA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackC7triggeryyAA9NSCClientC_s6UInt16VSSSgtFyycfU_TA', symObjAddr: 0x51C0, symBinAddr: 0x65B8, symSize: 0x68 }
+ - { offsetInCU: 0x1DC3, offset: 0x30E5A, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x52BC, symBinAddr: 0x66B4, symSize: 0x40 }
+ - { offsetInCU: 0x1DD7, offset: 0x30E6E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative20convertMessageToDataySo6NSDataCSgs13OpaquePointerVSgFySv_SitcfU_TA', symObjAddr: 0x530C, symBinAddr: 0x6704, symSize: 0x8 }
+ - { offsetInCU: 0x1E09, offset: 0x30EA0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative23convertNSCMessageToDataySo6NSDataCSgAA0E0CFySv_SitcfU_TA', symObjAddr: 0x5324, symBinAddr: 0x671C, symSize: 0x8 }
+ - { offsetInCU: 0x1E70, offset: 0x30F07, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x54, symBinAddr: 0x146C, symSize: 0x5C }
+ - { offsetInCU: 0x1F62, offset: 0x30FF9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH9hashValueSivgTW', symObjAddr: 0xB0, symBinAddr: 0x14C8, symSize: 0x78 }
+ - { offsetInCU: 0x200E, offset: 0x310A5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x128, symBinAddr: 0x1540, symSize: 0x58 }
+ - { offsetInCU: 0x207E, offset: 0x31115, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x180, symBinAddr: 0x1598, symSize: 0x74 }
+ - { offsetInCU: 0x23C9, offset: 0x31460, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x3EA0, symBinAddr: 0x5298, symSize: 0x58 }
+ - { offsetInCU: 0x25C9, offset: 0x31660, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfC', symObjAddr: 0x0, symBinAddr: 0x1418, symSize: 0x18 }
+ - { offsetInCU: 0x25DD, offset: 0x31674, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueSivg', symObjAddr: 0x18, symBinAddr: 0x1430, symSize: 0x3C }
+ - { offsetInCU: 0x2690, offset: 0x31727, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvg', symObjAddr: 0x298, symBinAddr: 0x16B0, symSize: 0x10 }
+ - { offsetInCU: 0x26E0, offset: 0x31777, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvg', symObjAddr: 0x38C, symBinAddr: 0x17A4, symSize: 0x34 }
+ - { offsetInCU: 0x2741, offset: 0x317D8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvg', symObjAddr: 0x430, symBinAddr: 0x1848, symSize: 0x58 }
+ - { offsetInCU: 0x27D4, offset: 0x3186B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCACycfc', symObjAddr: 0x61C, symBinAddr: 0x1A34, symSize: 0x2C }
+ - { offsetInCU: 0x2885, offset: 0x3191C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackC7triggeryyAA9NSCClientC_AA0D0CtF', symObjAddr: 0x674, symBinAddr: 0x1A8C, symSize: 0x20C }
+ - { offsetInCU: 0x29A6, offset: 0x31A3D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackC7triggeryyAA9NSCClientC_s6UInt16VSSSgtF', symObjAddr: 0x900, symBinAddr: 0x1D18, symSize: 0x250 }
+ - { offsetInCU: 0x2B15, offset: 0x31BAC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackC7triggeryyAA9NSCClientC_SStF', symObjAddr: 0xBA4, symBinAddr: 0x1FBC, symSize: 0x214 }
+ - { offsetInCU: 0x2C68, offset: 0x31CFF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackC7triggeryyAA9NSCClientC_So6NSDataCSgtF', symObjAddr: 0xE0C, symBinAddr: 0x2224, symSize: 0x20C }
+ - { offsetInCU: 0x2D89, offset: 0x31E20, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackC7triggeryyAA9NSCClientCF', symObjAddr: 0x106C, symBinAddr: 0x2484, symSize: 0x1EC }
+ - { offsetInCU: 0x2ED4, offset: 0x31F6B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64Vvg', symObjAddr: 0x138C, symBinAddr: 0x27A4, symSize: 0x18 }
+ - { offsetInCU: 0x2EF4, offset: 0x31F8B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64Vvg', symObjAddr: 0x138C, symBinAddr: 0x27A4, symSize: 0x18 }
+ - { offsetInCU: 0x2F0F, offset: 0x31FA6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCACycfc', symObjAddr: 0x14B4, symBinAddr: 0x28CC, symSize: 0x2C }
+ - { offsetInCU: 0x2FE6, offset: 0x3207D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfC', symObjAddr: 0x1834, symBinAddr: 0x2C4C, symSize: 0x98 }
+ - { offsetInCU: 0x3001, offset: 0x32098, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfc', symObjAddr: 0x18CC, symBinAddr: 0x2CE4, symSize: 0x240 }
+ - { offsetInCU: 0x3165, offset: 0x321FC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfD', symObjAddr: 0x1BBC, symBinAddr: 0x2FD4, symSize: 0x44 }
+ - { offsetInCU: 0x31D1, offset: 0x32268, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtF', symObjAddr: 0x1CE0, symBinAddr: 0x30F8, symSize: 0x60 }
+ - { offsetInCU: 0x3272, offset: 0x32309, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tF', symObjAddr: 0x1E10, symBinAddr: 0x3228, symSize: 0x1C }
+ - { offsetInCU: 0x32DA, offset: 0x32371, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tF', symObjAddr: 0x1F90, symBinAddr: 0x33A8, symSize: 0x1C }
+ - { offsetInCU: 0x3342, offset: 0x323D9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9broadcastyySSF', symObjAddr: 0x1FC8, symBinAddr: 0x33E0, symSize: 0x58 }
+ - { offsetInCU: 0x33C2, offset: 0x32459, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF', symObjAddr: 0x20E0, symBinAddr: 0x34F8, symSize: 0x18 }
+ - { offsetInCU: 0x33E2, offset: 0x32479, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF', symObjAddr: 0x20E0, symBinAddr: 0x34F8, symSize: 0x18 }
+ - { offsetInCU: 0x3413, offset: 0x324AA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF', symObjAddr: 0x2240, symBinAddr: 0x3658, symSize: 0x18 }
+ - { offsetInCU: 0x3433, offset: 0x324CA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF', symObjAddr: 0x2240, symBinAddr: 0x3658, symSize: 0x18 }
+ - { offsetInCU: 0x34BE, offset: 0x32555, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcF', symObjAddr: 0x2270, symBinAddr: 0x3688, symSize: 0x13C }
+ - { offsetInCU: 0x35C6, offset: 0x3265D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x23AC, symBinAddr: 0x37C4, symSize: 0x154 }
+ - { offsetInCU: 0x3729, offset: 0x327C0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2500, symBinAddr: 0x3918, symSize: 0x4 }
+ - { offsetInCU: 0x37E0, offset: 0x32877, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF', symObjAddr: 0x2568, symBinAddr: 0x3980, symSize: 0x14C }
+ - { offsetInCU: 0x38E8, offset: 0x3297F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x26B4, symBinAddr: 0x3ACC, symSize: 0xDC }
+ - { offsetInCU: 0x39F7, offset: 0x32A8E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2790, symBinAddr: 0x3BA8, symSize: 0x4 }
+ - { offsetInCU: 0x3A24, offset: 0x32ABB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF', symObjAddr: 0x2888, symBinAddr: 0x3CA0, symSize: 0x13C }
+ - { offsetInCU: 0x3B2C, offset: 0x32BC3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x29C4, symBinAddr: 0x3DDC, symSize: 0xDC }
+ - { offsetInCU: 0x3C3B, offset: 0x32CD2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2AA0, symBinAddr: 0x3EB8, symSize: 0x4 }
+ - { offsetInCU: 0x3CAE, offset: 0x32D45, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcF', symObjAddr: 0x2B08, symBinAddr: 0x3F20, symSize: 0x13C }
+ - { offsetInCU: 0x3DB6, offset: 0x32E4D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcFyAF_SvSgtcfU_', symObjAddr: 0x2C44, symBinAddr: 0x405C, symSize: 0x13C }
+ - { offsetInCU: 0x3EFE, offset: 0x32F95, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcFyAF_SvSgtcfU_To', symObjAddr: 0x2D80, symBinAddr: 0x4198, symSize: 0x4 }
+ - { offsetInCU: 0x3FAE, offset: 0x33045, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcF', symObjAddr: 0x2DE8, symBinAddr: 0x4200, symSize: 0x13C }
+ - { offsetInCU: 0x40B6, offset: 0x3314D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x2F24, symBinAddr: 0x433C, symSize: 0x114 }
+ - { offsetInCU: 0x41E4, offset: 0x3327B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x3038, symBinAddr: 0x4450, symSize: 0x4 }
+ - { offsetInCU: 0x421F, offset: 0x332B6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VF', symObjAddr: 0x30BC, symBinAddr: 0x44D4, symSize: 0xDC }
+ - { offsetInCU: 0x433F, offset: 0x333D6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcF', symObjAddr: 0x3284, symBinAddr: 0x469C, symSize: 0x13C }
+ - { offsetInCU: 0x4447, offset: 0x334DE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcFyAF_Spys4Int8VGSgSvSgtcfU_', symObjAddr: 0x33C0, symBinAddr: 0x47D8, symSize: 0xE8 }
+ - { offsetInCU: 0x453D, offset: 0x335D4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcFyAF_Spys4Int8VGSgSvSgtcfU_To', symObjAddr: 0x34A8, symBinAddr: 0x48C0, symSize: 0x4 }
+ - { offsetInCU: 0x456A, offset: 0x33601, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvg', symObjAddr: 0x3690, symBinAddr: 0x4AA8, symSize: 0x2C }
+ - { offsetInCU: 0x45F7, offset: 0x3368E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgF', symObjAddr: 0x36BC, symBinAddr: 0x4AD4, symSize: 0xDC }
+ - { offsetInCU: 0x4750, offset: 0x337E7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFySo07CServerG0V_SvSgtcfU_', symObjAddr: 0x3798, symBinAddr: 0x4BB0, symSize: 0x11C }
+ - { offsetInCU: 0x4810, offset: 0x338A7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFySo07CServerG0V_SvSgtcfU_To', symObjAddr: 0x38C8, symBinAddr: 0x4CE0, symSize: 0x4 }
+ - { offsetInCU: 0x4880, offset: 0x33917, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcF', symObjAddr: 0x3958, symBinAddr: 0x4D70, symSize: 0x90 }
+ - { offsetInCU: 0x4992, offset: 0x33A29, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctF', symObjAddr: 0x3AC0, symBinAddr: 0x4ED8, symSize: 0xA0 }
+ - { offsetInCU: 0x4A46, offset: 0x33ADD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctFySpys4Int8VGSg_SvSgtcfU_To', symObjAddr: 0x3BFC, symBinAddr: 0x5014, symSize: 0x14 }
+ - { offsetInCU: 0x4AD3, offset: 0x33B6A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfC', symObjAddr: 0x3CF0, symBinAddr: 0x5108, symSize: 0x20 }
+ - { offsetInCU: 0x4AE7, offset: 0x33B7E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfc', symObjAddr: 0x3D10, symBinAddr: 0x5128, symSize: 0x2C }
+ - { offsetInCU: 0x4B4C, offset: 0x33BE3, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSQSCSQ2eeoiySbx_xtFZTW', symObjAddr: 0x3DB0, symBinAddr: 0x51C8, symSize: 0x4C }
+ - { offsetInCU: 0x4B68, offset: 0x33BFF, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH9hashValueSivgTW', symObjAddr: 0x3E1C, symBinAddr: 0x5214, symSize: 0x3C }
+ - { offsetInCU: 0x4B84, offset: 0x33C1B, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x3E58, symBinAddr: 0x5250, symSize: 0x48 }
+ - { offsetInCU: 0x4BC2, offset: 0x33C59, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFs6UInt64V_Tg5', symObjAddr: 0x3EF8, symBinAddr: 0x52F0, symSize: 0x30 }
+ - { offsetInCU: 0x4C00, offset: 0x33C97, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFs6UInt64V_Tg5', symObjAddr: 0x3F28, symBinAddr: 0x5320, symSize: 0x9C }
+ - { offsetInCU: 0x4C62, offset: 0x33CF9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvgTf4n_g', symObjAddr: 0x486C, symBinAddr: 0x5C64, symSize: 0x58 }
+ - { offsetInCU: 0x89, offset: 0x33E78, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x258, symBinAddr: 0x69E0, symSize: 0x30 }
+ - { offsetInCU: 0xBB, offset: 0x33EAA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x288, symBinAddr: 0x6A10, symSize: 0x44 }
+ - { offsetInCU: 0xE8, offset: 0x33ED7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfCTf4nd_n', symObjAddr: 0xF14, symBinAddr: 0x769C, symSize: 0x14 }
+ - { offsetInCU: 0x15F, offset: 0x33F4E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TR', symObjAddr: 0x5C, symBinAddr: 0x67E4, symSize: 0x14 }
+ - { offsetInCU: 0x173, offset: 0x33F62, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TR', symObjAddr: 0x70, symBinAddr: 0x67F8, symSize: 0x44 }
+ - { offsetInCU: 0x1E3, offset: 0x33FD2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCACycfcTo', symObjAddr: 0x2CC, symBinAddr: 0x6A54, symSize: 0x2C }
+ - { offsetInCU: 0x281, offset: 0x34070, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCfETo', symObjAddr: 0x304, symBinAddr: 0x6A8C, symSize: 0x14 }
+ - { offsetInCU: 0x2D2, offset: 0x340C1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCACycfcTo', symObjAddr: 0x318, symBinAddr: 0x6AA0, symSize: 0x2C }
+ - { offsetInCU: 0x386, offset: 0x34175, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCfETo', symObjAddr: 0x380, symBinAddr: 0x6B08, symSize: 0x14 }
+ - { offsetInCU: 0x3D7, offset: 0x341C6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvgTo', symObjAddr: 0x394, symBinAddr: 0x6B1C, symSize: 0x10 }
+ - { offsetInCU: 0x3F7, offset: 0x341E6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvgTo', symObjAddr: 0x394, symBinAddr: 0x6B1C, symSize: 0x10 }
+ - { offsetInCU: 0x42D, offset: 0x3421C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvsTo', symObjAddr: 0x3A4, symBinAddr: 0x6B2C, symSize: 0x10 }
+ - { offsetInCU: 0x44D, offset: 0x3423C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvsTo', symObjAddr: 0x3A4, symBinAddr: 0x6B2C, symSize: 0x10 }
+ - { offsetInCU: 0x486, offset: 0x34275, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvgTo', symObjAddr: 0x3B4, symBinAddr: 0x6B3C, symSize: 0x10 }
+ - { offsetInCU: 0x4A6, offset: 0x34295, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvgTo', symObjAddr: 0x3B4, symBinAddr: 0x6B3C, symSize: 0x10 }
+ - { offsetInCU: 0x4DC, offset: 0x342CB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvsTo', symObjAddr: 0x3C4, symBinAddr: 0x6B4C, symSize: 0x10 }
+ - { offsetInCU: 0x4FC, offset: 0x342EB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvsTo', symObjAddr: 0x3C4, symBinAddr: 0x6B4C, symSize: 0x10 }
+ - { offsetInCU: 0x59B, offset: 0x3438A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfcTo', symObjAddr: 0x6AC, symBinAddr: 0x6E34, symSize: 0xF0 }
+ - { offsetInCU: 0x5CD, offset: 0x343BC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCfDTo', symObjAddr: 0x7E0, symBinAddr: 0x6F68, symSize: 0x68 }
+ - { offsetInCU: 0x608, offset: 0x343F7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6statusAA0D6StatusOvgTo', symObjAddr: 0x848, symBinAddr: 0x6FD0, symSize: 0x34 }
+ - { offsetInCU: 0x655, offset: 0x34444, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFTo', symObjAddr: 0xA9C, symBinAddr: 0x7224, symSize: 0x8C }
+ - { offsetInCU: 0x68C, offset: 0x3447B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC5startyyySSSgcFTo', symObjAddr: 0xBB0, symBinAddr: 0x7338, symSize: 0xD0 }
+ - { offsetInCU: 0x75E, offset: 0x3454D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctFTo', symObjAddr: 0xDC4, symBinAddr: 0x754C, symSize: 0xD8 }
+ - { offsetInCU: 0x83C, offset: 0x3462B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfcTo', symObjAddr: 0xEE8, symBinAddr: 0x7670, symSize: 0x2C }
+ - { offsetInCU: 0x8A4, offset: 0x34693, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCMa', symObjAddr: 0xF28, symBinAddr: 0x76B0, symSize: 0x20 }
+ - { offsetInCU: 0x8B8, offset: 0x346A7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCMa', symObjAddr: 0xF48, symBinAddr: 0x76D0, symSize: 0x20 }
+ - { offsetInCU: 0x8CC, offset: 0x346BB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCMa', symObjAddr: 0xF68, symBinAddr: 0x76F0, symSize: 0x20 }
+ - { offsetInCU: 0x8E0, offset: 0x346CF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASQWb', symObjAddr: 0xF88, symBinAddr: 0x7710, symSize: 0x4 }
+ - { offsetInCU: 0x8F4, offset: 0x346E3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOACSQAAWl', symObjAddr: 0xF8C, symBinAddr: 0x7714, symSize: 0x44 }
+ - { offsetInCU: 0x908, offset: 0x346F7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOMa', symObjAddr: 0xFD0, symBinAddr: 0x7758, symSize: 0x10 }
+ - { offsetInCU: 0x91C, offset: 0x3470B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TRTA', symObjAddr: 0x10A8, symBinAddr: 0x7830, symSize: 0x8 }
+ - { offsetInCU: 0x93B, offset: 0x3472A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TRTA', symObjAddr: 0x10C0, symBinAddr: 0x7838, symSize: 0x10 }
+ - { offsetInCU: 0x975, offset: 0x34764, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF15WebServerNative15NSCServerStatusO_Tgq5', symObjAddr: 0x0, symBinAddr: 0x6788, symSize: 0x5C }
+ - { offsetInCU: 0x9F6, offset: 0x347E5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x108, symBinAddr: 0x6890, symSize: 0xC }
+ - { offsetInCU: 0xA7C, offset: 0x3486B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH9hashValueSivgTW', symObjAddr: 0x114, symBinAddr: 0x689C, symSize: 0x78 }
+ - { offsetInCU: 0xB28, offset: 0x34917, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x18C, symBinAddr: 0x6914, symSize: 0x58 }
+ - { offsetInCU: 0xB98, offset: 0x34987, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x1E4, symBinAddr: 0x696C, symSize: 0x74 }
+ - { offsetInCU: 0xD6F, offset: 0x34B5E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfC', symObjAddr: 0xB4, symBinAddr: 0x683C, symSize: 0x18 }
+ - { offsetInCU: 0xD83, offset: 0x34B72, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueSivg', symObjAddr: 0xCC, symBinAddr: 0x6854, symSize: 0x3C }
+ - { offsetInCU: 0xE7A, offset: 0x34C69, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfC', symObjAddr: 0x3D4, symBinAddr: 0x6B5C, symSize: 0xA8 }
+ - { offsetInCU: 0xE95, offset: 0x34C84, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfc', symObjAddr: 0x47C, symBinAddr: 0x6C04, symSize: 0x230 }
+ - { offsetInCU: 0xFB6, offset: 0x34DA5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCfD', symObjAddr: 0x79C, symBinAddr: 0x6F24, symSize: 0x44 }
+ - { offsetInCU: 0x101F, offset: 0x34E0E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6statusAA0D6StatusOvg', symObjAddr: 0x87C, symBinAddr: 0x7004, symSize: 0x2C }
+ - { offsetInCU: 0x10A5, offset: 0x34E94, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgF', symObjAddr: 0x8A8, symBinAddr: 0x7030, symSize: 0xD4 }
+ - { offsetInCU: 0x11F3, offset: 0x34FE2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFySo07CServerF0V_SvSgtcfU_', symObjAddr: 0x97C, symBinAddr: 0x7104, symSize: 0x108 }
+ - { offsetInCU: 0x12AA, offset: 0x35099, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFySo07CServerF0V_SvSgtcfU_To', symObjAddr: 0xA98, symBinAddr: 0x7220, symSize: 0x4 }
+ - { offsetInCU: 0x1315, offset: 0x35104, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC5startyyySSSgcF', symObjAddr: 0xB28, symBinAddr: 0x72B0, symSize: 0x88 }
+ - { offsetInCU: 0x141F, offset: 0x3520E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctF', symObjAddr: 0xC80, symBinAddr: 0x7408, symSize: 0x98 }
+ - { offsetInCU: 0x14D1, offset: 0x352C0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctFySpys4Int8VGSg_SvSgtcfU_To', symObjAddr: 0xDB0, symBinAddr: 0x7538, symSize: 0x14 }
+ - { offsetInCU: 0x1557, offset: 0x35346, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfC', symObjAddr: 0xE9C, symBinAddr: 0x7624, symSize: 0x20 }
+ - { offsetInCU: 0x156B, offset: 0x3535A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfc', symObjAddr: 0xEBC, symBinAddr: 0x7644, symSize: 0x2C }
+...
diff --git a/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/x86_64/WebServerNative.yml b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/x86_64/WebServerNative.yml
new file mode 100644
index 00000000..6433a054
--- /dev/null
+++ b/packages/nativescript-web-server/platforms/ios/WebServerNative.xcframework/ios-arm64_x86_64-simulator/dSYMs/WebServerNative.framework.dSYM/Contents/Resources/Relocations/x86_64/WebServerNative.yml
@@ -0,0 +1,188 @@
+---
+triple: 'x86_64-apple-darwin'
+binary-path: '/Users/triniwiz/Documents/GitHub/nstudio-nativescript-plugins/packages/nativescript-web-server/src-native/web-server-ios/dist/Release-iphonesimulator/WebServerNative.framework/WebServerNative'
+relocations:
+ - { offsetInCU: 0x34, offset: 0x306AD, size: 0x8, addend: 0x0, symName: _WebServerNativeVersionString, symObjAddr: 0x0, symBinAddr: 0x2AF4C0, symSize: 0x0 }
+ - { offsetInCU: 0x69, offset: 0x306E2, size: 0x8, addend: 0x0, symName: _WebServerNativeVersionNumber, symObjAddr: 0x38, symBinAddr: 0x2AF4F8, symSize: 0x0 }
+ - { offsetInCU: 0x8D, offset: 0x30785, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x1A0, symBinAddr: 0x1AE0, symSize: 0x30 }
+ - { offsetInCU: 0xBF, offset: 0x307B7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x1D0, symBinAddr: 0x1B10, symSize: 0x40 }
+ - { offsetInCU: 0xEC, offset: 0x307E4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfCTf4nd_n', symObjAddr: 0x4A90, symBinAddr: 0x63B0, symSize: 0x20 }
+ - { offsetInCU: 0x197, offset: 0x3088F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvgTo', symObjAddr: 0x210, symBinAddr: 0x1B50, symSize: 0x20 }
+ - { offsetInCU: 0x1ED, offset: 0x308E5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7messages13OpaquePointerVSgvsTo', symObjAddr: 0x230, symBinAddr: 0x1B70, symSize: 0x20 }
+ - { offsetInCU: 0x246, offset: 0x3093E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvgTo', symObjAddr: 0x250, symBinAddr: 0x1B90, symSize: 0x20 }
+ - { offsetInCU: 0x2A1, offset: 0x30999, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC7message4typeACs13OpaquePointerVSg_AA0D4TypeOtcfcTo', symObjAddr: 0x290, symBinAddr: 0x1BD0, symSize: 0x70 }
+ - { offsetInCU: 0x306, offset: 0x309FE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvgTo', symObjAddr: 0x300, symBinAddr: 0x1C40, symSize: 0x70 }
+ - { offsetInCU: 0x37F, offset: 0x30A77, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvgTo', symObjAddr: 0x3A0, symBinAddr: 0x1CE0, symSize: 0x70 }
+ - { offsetInCU: 0x42E, offset: 0x30B26, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCACycfcTo', symObjAddr: 0x630, symBinAddr: 0x1F70, symSize: 0x30 }
+ - { offsetInCU: 0x508, offset: 0x30C00, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative23convertNSCMessageToDataySo6NSDataCSgAA0E0CF', symObjAddr: 0x460, symBinAddr: 0x1DA0, symSize: 0x120 }
+ - { offsetInCU: 0x64A, offset: 0x30D42, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCfETo', symObjAddr: 0x5C0, symBinAddr: 0x1F00, symSize: 0x40 }
+ - { offsetInCU: 0x6FD, offset: 0x30DF5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackCACycfcTo', symObjAddr: 0x8A0, symBinAddr: 0x21E0, symSize: 0x30 }
+ - { offsetInCU: 0x7E2, offset: 0x30EDA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC6clientACs13OpaquePointerVSg_tcfcTo', symObjAddr: 0x1390, symBinAddr: 0x2CD0, symSize: 0x40 }
+ - { offsetInCU: 0x855, offset: 0x30F4D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64VvgTo', symObjAddr: 0x13D0, symBinAddr: 0x2D10, symSize: 0x20 }
+ - { offsetInCU: 0x8C6, offset: 0x30FBE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCACycfcTo', symObjAddr: 0x1550, symBinAddr: 0x2E90, symSize: 0x30 }
+ - { offsetInCU: 0x949, offset: 0x31041, size: 0x8, addend: 0x0, symName: '_$sIeg_IeyB_TR', symObjAddr: 0x870, symBinAddr: 0x21B0, symSize: 0x30 }
+ - { offsetInCU: 0x9D4, offset: 0x310CC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackCACycfcTo', symObjAddr: 0xB30, symBinAddr: 0x2470, symSize: 0x30 }
+ - { offsetInCU: 0xB00, offset: 0x311F8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackCACycfcTo', symObjAddr: 0xDC0, symBinAddr: 0x2700, symSize: 0x30 }
+ - { offsetInCU: 0xC2C, offset: 0x31324, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackCACycfcTo', symObjAddr: 0x1040, symBinAddr: 0x2980, symSize: 0x30 }
+ - { offsetInCU: 0xD53, offset: 0x3144B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackCACycfcTo', symObjAddr: 0x12A0, symBinAddr: 0x2BE0, symSize: 0x30 }
+ - { offsetInCU: 0xE11, offset: 0x31509, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative20convertMessageToDataySo6NSDataCSgs13OpaquePointerVSgF', symObjAddr: 0x1580, symBinAddr: 0x2EC0, symSize: 0x100 }
+ - { offsetInCU: 0xF41, offset: 0x31639, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvgTo', symObjAddr: 0x1680, symBinAddr: 0x2FC0, symSize: 0x20 }
+ - { offsetInCU: 0xF99, offset: 0x31691, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6servers13OpaquePointerVSgvsTo', symObjAddr: 0x16A0, symBinAddr: 0x2FE0, symSize: 0x20 }
+ - { offsetInCU: 0xFF4, offset: 0x316EC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvgTo', symObjAddr: 0x16C0, symBinAddr: 0x3000, symSize: 0x20 }
+ - { offsetInCU: 0x104C, offset: 0x31744, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C14statusCallbackSVSgvsTo', symObjAddr: 0x16E0, symBinAddr: 0x3020, symSize: 0x20 }
+ - { offsetInCU: 0x1104, offset: 0x317FC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfcTo', symObjAddr: 0x1C10, symBinAddr: 0x3550, symSize: 0x80 }
+ - { offsetInCU: 0x1137, offset: 0x3182F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfDTo', symObjAddr: 0x1CE0, symBinAddr: 0x3620, symSize: 0x60 }
+ - { offsetInCU: 0x1194, offset: 0x3188C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtFTo', symObjAddr: 0x1E10, symBinAddr: 0x3750, symSize: 0xA0 }
+ - { offsetInCU: 0x1212, offset: 0x3190A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tFTo', symObjAddr: 0x1F50, symBinAddr: 0x3890, symSize: 0x20 }
+ - { offsetInCU: 0x1295, offset: 0x3198D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tFTo', symObjAddr: 0x20E0, symBinAddr: 0x3A20, symSize: 0x20 }
+ - { offsetInCU: 0x1318, offset: 0x31A10, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9broadcastyySSFTo', symObjAddr: 0x2150, symBinAddr: 0x3A90, symSize: 0x90 }
+ - { offsetInCU: 0x1391, offset: 0x31A89, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyFTo', symObjAddr: 0x2280, symBinAddr: 0x3BC0, symSize: 0x20 }
+ - { offsetInCU: 0x1405, offset: 0x31AFD, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyFTo', symObjAddr: 0x2400, symBinAddr: 0x3D40, symSize: 0x20 }
+ - { offsetInCU: 0x1594, offset: 0x31C8C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VFTo', symObjAddr: 0x33E0, symBinAddr: 0x4D20, symSize: 0xE0 }
+ - { offsetInCU: 0x166E, offset: 0x31D66, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvgTo', symObjAddr: 0x38A0, symBinAddr: 0x51E0, symSize: 0x30 }
+ - { offsetInCU: 0x16BD, offset: 0x31DB5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFTo', symObjAddr: 0x3B00, symBinAddr: 0x5440, symSize: 0x80 }
+ - { offsetInCU: 0x16F5, offset: 0x31DED, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcFTo', symObjAddr: 0x3C10, symBinAddr: 0x5550, symSize: 0xD0 }
+ - { offsetInCU: 0x17CB, offset: 0x31EC3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctFTo', symObjAddr: 0x3E10, symBinAddr: 0x5750, symSize: 0xE0 }
+ - { offsetInCU: 0x18AE, offset: 0x31FA6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfcTo', symObjAddr: 0x3F40, symBinAddr: 0x5880, symSize: 0x30 }
+ - { offsetInCU: 0x1918, offset: 0x32010, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfETo', symObjAddr: 0x1D40, symBinAddr: 0x3680, symSize: 0x70 }
+ - { offsetInCU: 0x1964, offset: 0x3205C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCs6UInt16VSo8NSStringCSgIeyByyy_AcESSSgIeggyg_TR', symObjAddr: 0x32B0, symBinAddr: 0x4BF0, symSize: 0x50 }
+ - { offsetInCU: 0x1A1E, offset: 0x32116, size: 0x8, addend: 0x0, symName: '_$sSvSiIegyy_SvSiIeyByy_TR', symObjAddr: 0x3F70, symBinAddr: 0x58B0, symSize: 0x40 }
+ - { offsetInCU: 0x1A90, offset: 0x32188, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCMa', symObjAddr: 0x4B10, symBinAddr: 0x6430, symSize: 0x20 }
+ - { offsetInCU: 0x1AA4, offset: 0x3219C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCMa', symObjAddr: 0x4B30, symBinAddr: 0x6450, symSize: 0x20 }
+ - { offsetInCU: 0x1AB8, offset: 0x321B0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CMa', symObjAddr: 0x4C40, symBinAddr: 0x6560, symSize: 0x20 }
+ - { offsetInCU: 0x1ACC, offset: 0x321C4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackCMa', symObjAddr: 0x4C60, symBinAddr: 0x6580, symSize: 0x20 }
+ - { offsetInCU: 0x1AE0, offset: 0x321D8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackCMa', symObjAddr: 0x4C80, symBinAddr: 0x65A0, symSize: 0x20 }
+ - { offsetInCU: 0x1AF4, offset: 0x321EC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackCMa', symObjAddr: 0x4CA0, symBinAddr: 0x65C0, symSize: 0x20 }
+ - { offsetInCU: 0x1B08, offset: 0x32200, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackCMa', symObjAddr: 0x4CC0, symBinAddr: 0x65E0, symSize: 0x20 }
+ - { offsetInCU: 0x1B1C, offset: 0x32214, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackCMa', symObjAddr: 0x4CE0, symBinAddr: 0x6600, symSize: 0x20 }
+ - { offsetInCU: 0x1B30, offset: 0x32228, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASQWb', symObjAddr: 0x4D00, symBinAddr: 0x6620, symSize: 0x10 }
+ - { offsetInCU: 0x1B44, offset: 0x3223C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOACSQAAWl', symObjAddr: 0x4D10, symBinAddr: 0x6630, symSize: 0x30 }
+ - { offsetInCU: 0x1B58, offset: 0x32250, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOMa', symObjAddr: 0x4D40, symBinAddr: 0x6660, symSize: 0x10 }
+ - { offsetInCU: 0x1B6C, offset: 0x32264, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaMa', symObjAddr: 0x51A0, symBinAddr: 0x6AC0, symSize: 0x30 }
+ - { offsetInCU: 0x1B80, offset: 0x32278, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSQWb', symObjAddr: 0x51D0, symBinAddr: 0x6AF0, symSize: 0x20 }
+ - { offsetInCU: 0x1B94, offset: 0x3228C, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefa14CoreFoundation9_CFObjectSCSHWb', symObjAddr: 0x51F0, symBinAddr: 0x6B10, symSize: 0x20 }
+ - { offsetInCU: 0x1BA8, offset: 0x322A0, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TRTA', symObjAddr: 0x5230, symBinAddr: 0x6B50, symSize: 0x10 }
+ - { offsetInCU: 0x1BBC, offset: 0x322B4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIegy_SgWOe', symObjAddr: 0x5240, symBinAddr: 0x6B60, symSize: 0x20 }
+ - { offsetInCU: 0x1BD0, offset: 0x322C8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TRTA', symObjAddr: 0x5260, symBinAddr: 0x6B80, symSize: 0x10 }
+ - { offsetInCU: 0x1BEF, offset: 0x322E7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCSo8NSStringCIeyByy_ACSSIeggg_TRTA', symObjAddr: 0x5270, symBinAddr: 0x6B90, symSize: 0x40 }
+ - { offsetInCU: 0x1C18, offset: 0x32310, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCs6UInt16VSo8NSStringCSgIeyByyy_AcESSSgIeggyg_TRTA', symObjAddr: 0x52B0, symBinAddr: 0x6BD0, symSize: 0x10 }
+ - { offsetInCU: 0x1C37, offset: 0x3232F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCIeyBy_ACIegg_TRTA', symObjAddr: 0x52C0, symBinAddr: 0x6BE0, symSize: 0x20 }
+ - { offsetInCU: 0x1C6B, offset: 0x32363, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCSo6NSDataCSgIeyByy_AcFIeggg_TRTA', symObjAddr: 0x52E0, symBinAddr: 0x6C00, symSize: 0x20 }
+ - { offsetInCU: 0x1C9F, offset: 0x32397, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCAA10NSCMessageCIeyByy_AcEIeggg_TRTA', symObjAddr: 0x5300, symBinAddr: 0x6C20, symSize: 0x20 }
+ - { offsetInCU: 0x1CC8, offset: 0x323C0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackC7triggeryyAA9NSCClientCFyycfU_TA', symObjAddr: 0x5360, symBinAddr: 0x6C80, symSize: 0x50 }
+ - { offsetInCU: 0x1D24, offset: 0x3241C, size: 0x8, addend: 0x0, symName: _block_copy_helper, symObjAddr: 0x53B0, symBinAddr: 0x6CD0, symSize: 0x20 }
+ - { offsetInCU: 0x1D38, offset: 0x32430, size: 0x8, addend: 0x0, symName: _block_destroy_helper, symObjAddr: 0x53D0, symBinAddr: 0x6CF0, symSize: 0x10 }
+ - { offsetInCU: 0x1D4C, offset: 0x32444, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackC7triggeryyAA9NSCClientC_SStFyycfU_TA', symObjAddr: 0x5490, symBinAddr: 0x6DB0, symSize: 0x60 }
+ - { offsetInCU: 0x1DB2, offset: 0x324AA, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackC7triggeryyAA9NSCClientC_s6UInt16VSSSgtFyycfU_TA', symObjAddr: 0x5530, symBinAddr: 0x6E50, symSize: 0x70 }
+ - { offsetInCU: 0x1E10, offset: 0x32508, size: 0x8, addend: 0x0, symName: ___swift_instantiateConcreteTypeFromMangledName, symObjAddr: 0x5660, symBinAddr: 0x6F80, symSize: 0x40 }
+ - { offsetInCU: 0x1E24, offset: 0x3251C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative20convertMessageToDataySo6NSDataCSgs13OpaquePointerVSgFySv_SitcfU_TA', symObjAddr: 0x56C0, symBinAddr: 0x6FE0, symSize: 0x10 }
+ - { offsetInCU: 0x1E56, offset: 0x3254E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative23convertNSCMessageToDataySo6NSDataCSgAA0E0CFySv_SitcfU_TA', symObjAddr: 0x56F0, symBinAddr: 0x7010, symSize: 0x10 }
+ - { offsetInCU: 0x1EBD, offset: 0x325B5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x50, symBinAddr: 0x1990, symSize: 0x50 }
+ - { offsetInCU: 0x1FAF, offset: 0x326A7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH9hashValueSivgTW', symObjAddr: 0xA0, symBinAddr: 0x19E0, symSize: 0x60 }
+ - { offsetInCU: 0x205B, offset: 0x32753, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x100, symBinAddr: 0x1A40, symSize: 0x40 }
+ - { offsetInCU: 0x20CB, offset: 0x327C3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x140, symBinAddr: 0x1A80, symSize: 0x60 }
+ - { offsetInCU: 0x2425, offset: 0x32B1D, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x4080, symBinAddr: 0x59A0, symSize: 0x50 }
+ - { offsetInCU: 0x2625, offset: 0x32D1D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueACSgSi_tcfC', symObjAddr: 0x0, symBinAddr: 0x1940, symSize: 0x10 }
+ - { offsetInCU: 0x2639, offset: 0x32D31, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative14NSCMessageTypeO8rawValueSivg', symObjAddr: 0x10, symBinAddr: 0x1950, symSize: 0x40 }
+ - { offsetInCU: 0x26EC, offset: 0x32DE4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4typeAA0D4TypeOvg', symObjAddr: 0x270, symBinAddr: 0x1BB0, symSize: 0x20 }
+ - { offsetInCU: 0x273C, offset: 0x32E34, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvg', symObjAddr: 0x370, symBinAddr: 0x1CB0, symSize: 0x30 }
+ - { offsetInCU: 0x279D, offset: 0x32E95, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4dataSo6NSDataCSgvg', symObjAddr: 0x410, symBinAddr: 0x1D50, symSize: 0x50 }
+ - { offsetInCU: 0x2839, offset: 0x32F31, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageCACycfc', symObjAddr: 0x600, symBinAddr: 0x1F40, symSize: 0x30 }
+ - { offsetInCU: 0x28EA, offset: 0x32FE2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCMessageCallbackC7triggeryyAA9NSCClientC_AA0D0CtF', symObjAddr: 0x660, symBinAddr: 0x1FA0, symSize: 0x210 }
+ - { offsetInCU: 0x2A0A, offset: 0x33102, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCReasonCallbackC7triggeryyAA9NSCClientC_s6UInt16VSSSgtF', symObjAddr: 0x910, symBinAddr: 0x2250, symSize: 0x220 }
+ - { offsetInCU: 0x2B79, offset: 0x33271, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStringCallbackC7triggeryyAA9NSCClientC_SStF', symObjAddr: 0xBA0, symBinAddr: 0x24E0, symSize: 0x220 }
+ - { offsetInCU: 0x2CCC, offset: 0x333C4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCDataCallbackC7triggeryyAA9NSCClientC_So6NSDataCSgtF', symObjAddr: 0xE30, symBinAddr: 0x2770, symSize: 0x210 }
+ - { offsetInCU: 0x2DEB, offset: 0x334E3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative18NSCConnectCallbackC7triggeryyAA9NSCClientCF', symObjAddr: 0x10B0, symBinAddr: 0x29F0, symSize: 0x1F0 }
+ - { offsetInCU: 0x2F38, offset: 0x33630, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientC2ids6UInt64Vvg', symObjAddr: 0x13F0, symBinAddr: 0x2D30, symSize: 0x20 }
+ - { offsetInCU: 0x2F73, offset: 0x3366B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCClientCACycfc', symObjAddr: 0x1520, symBinAddr: 0x2E60, symSize: 0x30 }
+ - { offsetInCU: 0x304A, offset: 0x33742, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfC', symObjAddr: 0x1960, symBinAddr: 0x32A0, symSize: 0x70 }
+ - { offsetInCU: 0x3065, offset: 0x3375D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CyACSb_SSSiSSSgs5Int16Vs6UInt32VSbtcfc', symObjAddr: 0x19D0, symBinAddr: 0x3310, symSize: 0x240 }
+ - { offsetInCU: 0x31C8, offset: 0x338C0, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CfD', symObjAddr: 0x1C90, symBinAddr: 0x35D0, symSize: 0x50 }
+ - { offsetInCU: 0x3234, offset: 0x3392C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4send4text2idySS_s6UInt64VtF', symObjAddr: 0x1DB0, symBinAddr: 0x36F0, symSize: 0x60 }
+ - { offsetInCU: 0x32D3, offset: 0x339CB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPing2idys6UInt64V_tF', symObjAddr: 0x1F30, symBinAddr: 0x3870, symSize: 0x20 }
+ - { offsetInCU: 0x333B, offset: 0x33A33, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C13sendEmptyPong2idys6UInt64V_tF', symObjAddr: 0x20C0, symBinAddr: 0x3A00, symSize: 0x20 }
+ - { offsetInCU: 0x33A3, offset: 0x33A9B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9broadcastyySSF', symObjAddr: 0x2100, symBinAddr: 0x3A40, symSize: 0x50 }
+ - { offsetInCU: 0x3421, offset: 0x33B19, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPingyyF', symObjAddr: 0x2260, symBinAddr: 0x3BA0, symSize: 0x20 }
+ - { offsetInCU: 0x3472, offset: 0x33B6A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18broadcastEmptyPongyyF', symObjAddr: 0x23E0, symBinAddr: 0x3D20, symSize: 0x20 }
+ - { offsetInCU: 0x351D, offset: 0x33C15, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcF', symObjAddr: 0x2420, symBinAddr: 0x3D60, symSize: 0x130 }
+ - { offsetInCU: 0x3625, offset: 0x33D1D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x2550, symBinAddr: 0x3E90, symSize: 0x170 }
+ - { offsetInCU: 0x3787, offset: 0x33E7F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnMessageys6UInt64VyAA9NSCClientC_AA10NSCMessageCtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x26C0, symBinAddr: 0x4000, symSize: 0x10 }
+ - { offsetInCU: 0x383E, offset: 0x33F36, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF', symObjAddr: 0x2760, symBinAddr: 0x40A0, symSize: 0x140 }
+ - { offsetInCU: 0x3946, offset: 0x3403E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x28A0, symBinAddr: 0x41E0, symSize: 0xE0 }
+ - { offsetInCU: 0x3A7E, offset: 0x34176, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPingys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2980, symBinAddr: 0x42C0, symSize: 0x10 }
+ - { offsetInCU: 0x3AAB, offset: 0x341A3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcF', symObjAddr: 0x2AA0, symBinAddr: 0x43E0, symSize: 0x130 }
+ - { offsetInCU: 0x3BB3, offset: 0x342AB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x2BD0, symBinAddr: 0x4510, symSize: 0xE0 }
+ - { offsetInCU: 0x3CEB, offset: 0x343E3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C9addOnPongys6UInt64VyAA9NSCClientC_So6NSDataCSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x2CB0, symBinAddr: 0x45F0, symSize: 0x10 }
+ - { offsetInCU: 0x3D5E, offset: 0x34456, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcF', symObjAddr: 0x2D50, symBinAddr: 0x4690, symSize: 0x130 }
+ - { offsetInCU: 0x3E66, offset: 0x3455E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcFyAF_SvSgtcfU_', symObjAddr: 0x2E80, symBinAddr: 0x47C0, symSize: 0x130 }
+ - { offsetInCU: 0x3FAE, offset: 0x346A6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C12addOnConnectys6UInt64VyAA9NSCClientCcFyAF_SvSgtcfU_To', symObjAddr: 0x2FB0, symBinAddr: 0x48F0, symSize: 0x10 }
+ - { offsetInCU: 0x405E, offset: 0x34756, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcF', symObjAddr: 0x3050, symBinAddr: 0x4990, symSize: 0x130 }
+ - { offsetInCU: 0x4166, offset: 0x3485E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_', symObjAddr: 0x3180, symBinAddr: 0x4AC0, symSize: 0x100 }
+ - { offsetInCU: 0x4296, offset: 0x3498E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C15addOnDisconnectys6UInt64VyAA9NSCClientC_s6UInt16VSSSgtcFyAF_s13OpaquePointerVSgSvSgtcfU_To', symObjAddr: 0x3280, symBinAddr: 0x4BC0, symSize: 0x10 }
+ - { offsetInCU: 0x42D1, offset: 0x349C9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C18removeOnDisconnectyys6UInt64VF', symObjAddr: 0x3300, symBinAddr: 0x4C40, symSize: 0xE0 }
+ - { offsetInCU: 0x43F1, offset: 0x34AE9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcF', symObjAddr: 0x34C0, symBinAddr: 0x4E00, symSize: 0x130 }
+ - { offsetInCU: 0x44F9, offset: 0x34BF1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcFyAF_Spys4Int8VGSgSvSgtcfU_', symObjAddr: 0x35F0, symBinAddr: 0x4F30, symSize: 0xF0 }
+ - { offsetInCU: 0x45ED, offset: 0x34CE5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C10addOnErrorys6UInt64VyAA9NSCClientC_SStcFyAF_Spys4Int8VGSgSvSgtcfU_To', symObjAddr: 0x36E0, symBinAddr: 0x5020, symSize: 0x10 }
+ - { offsetInCU: 0x461A, offset: 0x34D12, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C6statusAA15NSCServerStatusOvg', symObjAddr: 0x38D0, symBinAddr: 0x5210, symSize: 0x30 }
+ - { offsetInCU: 0x46A7, offset: 0x34D9F, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgF', symObjAddr: 0x3900, symBinAddr: 0x5240, symSize: 0xD0 }
+ - { offsetInCU: 0x47FE, offset: 0x34EF6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFySo07CServerG0V_SvSgtcfU_', symObjAddr: 0x39D0, symBinAddr: 0x5310, symSize: 0x120 }
+ - { offsetInCU: 0x48BE, offset: 0x34FB6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C23setStatusChangeCallbackyyyAA09NSCServerG0OcSgFySo07CServerG0V_SvSgtcfU_To', symObjAddr: 0x3AF0, symBinAddr: 0x5430, symSize: 0x10 }
+ - { offsetInCU: 0x492E, offset: 0x35026, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C5startyyySSSgcF', symObjAddr: 0x3B80, symBinAddr: 0x54C0, symSize: 0x90 }
+ - { offsetInCU: 0x4A3E, offset: 0x35136, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctF', symObjAddr: 0x3CE0, symBinAddr: 0x5620, symSize: 0x90 }
+ - { offsetInCU: 0x4AF0, offset: 0x351E8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0C4stopyySb_ySSSgctFySpys4Int8VGSg_SvSgtcfU_To', symObjAddr: 0x3E00, symBinAddr: 0x5740, symSize: 0x10 }
+ - { offsetInCU: 0x4B7D, offset: 0x35275, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfC', symObjAddr: 0x3EF0, symBinAddr: 0x5830, symSize: 0x20 }
+ - { offsetInCU: 0x4B91, offset: 0x35289, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative012NSCWebSocketB0CACycfc', symObjAddr: 0x3F10, symBinAddr: 0x5850, symSize: 0x30 }
+ - { offsetInCU: 0x4BF6, offset: 0x352EE, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSQSCSQ2eeoiySbx_xtFZTW', symObjAddr: 0x3FB0, symBinAddr: 0x58F0, symSize: 0x40 }
+ - { offsetInCU: 0x4C12, offset: 0x3530A, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH9hashValueSivgTW', symObjAddr: 0x4010, symBinAddr: 0x5930, symSize: 0x30 }
+ - { offsetInCU: 0x4C2E, offset: 0x35326, size: 0x8, addend: 0x0, symName: '_$sSo12CFRunLoopRefaSHSCSH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x4040, symBinAddr: 0x5960, symSize: 0x40 }
+ - { offsetInCU: 0x4C6C, offset: 0x35364, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4findys10_HashTableV6BucketV6bucket_Sb5foundtxSHRzlFs6UInt64V_Tg5', symObjAddr: 0x40D0, symBinAddr: 0x59F0, symSize: 0x30 }
+ - { offsetInCU: 0x4CAA, offset: 0x353A2, size: 0x8, addend: 0x0, symName: '_$ss22__RawDictionaryStorageC4find_9hashValues10_HashTableV6BucketV6bucket_Sb5foundtx_SitSHRzlFs6UInt64V_Tg5', symObjAddr: 0x4100, symBinAddr: 0x5A20, symSize: 0x90 }
+ - { offsetInCU: 0x4D04, offset: 0x353FC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative10NSCMessageC4textSSSgvgTf4n_g', symObjAddr: 0x4AB0, symBinAddr: 0x63D0, symSize: 0x60 }
+ - { offsetInCU: 0x89, offset: 0x3558A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSYAASY8rawValuexSg03RawG0Qz_tcfCTW', symObjAddr: 0x210, symBinAddr: 0x73C0, symSize: 0x30 }
+ - { offsetInCU: 0xBB, offset: 0x355BC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSYAASY8rawValue03RawG0QzvgTW', symObjAddr: 0x240, symBinAddr: 0x73F0, symSize: 0x40 }
+ - { offsetInCU: 0xE8, offset: 0x355E9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfCTf4nd_n', symObjAddr: 0xEE0, symBinAddr: 0x8090, symSize: 0x20 }
+ - { offsetInCU: 0x15D, offset: 0x3565E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TR', symObjAddr: 0x50, symBinAddr: 0x7200, symSize: 0x20 }
+ - { offsetInCU: 0x171, offset: 0x35672, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TR', symObjAddr: 0x70, symBinAddr: 0x7220, symSize: 0x40 }
+ - { offsetInCU: 0x1E1, offset: 0x356E2, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCACycfcTo', symObjAddr: 0x280, symBinAddr: 0x7430, symSize: 0x30 }
+ - { offsetInCU: 0x27F, offset: 0x35780, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCfETo', symObjAddr: 0x2D0, symBinAddr: 0x7480, symSize: 0x20 }
+ - { offsetInCU: 0x2D0, offset: 0x357D1, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCACycfcTo', symObjAddr: 0x2F0, symBinAddr: 0x74A0, symSize: 0x30 }
+ - { offsetInCU: 0x384, offset: 0x35885, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCfETo', symObjAddr: 0x370, symBinAddr: 0x7520, symSize: 0x20 }
+ - { offsetInCU: 0x3D5, offset: 0x358D6, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvgTo', symObjAddr: 0x390, symBinAddr: 0x7540, symSize: 0x20 }
+ - { offsetInCU: 0x42B, offset: 0x3592C, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6servers13OpaquePointerVSgvsTo', symObjAddr: 0x3B0, symBinAddr: 0x7560, symSize: 0x20 }
+ - { offsetInCU: 0x484, offset: 0x35985, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvgTo', symObjAddr: 0x3D0, symBinAddr: 0x7580, symSize: 0x20 }
+ - { offsetInCU: 0x4DA, offset: 0x359DB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC14statusCallbackSVSgvsTo', symObjAddr: 0x3F0, symBinAddr: 0x75A0, symSize: 0x20 }
+ - { offsetInCU: 0x599, offset: 0x35A9A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfcTo', symObjAddr: 0x6D0, symBinAddr: 0x7880, symSize: 0xC0 }
+ - { offsetInCU: 0x5CB, offset: 0x35ACC, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCfDTo', symObjAddr: 0x7E0, symBinAddr: 0x7990, symSize: 0x60 }
+ - { offsetInCU: 0x606, offset: 0x35B07, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6statusAA0D6StatusOvgTo', symObjAddr: 0x840, symBinAddr: 0x79F0, symSize: 0x30 }
+ - { offsetInCU: 0x653, offset: 0x35B54, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFTo', symObjAddr: 0xA90, symBinAddr: 0x7C40, symSize: 0x80 }
+ - { offsetInCU: 0x68A, offset: 0x35B8B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC5startyyySSSgcFTo', symObjAddr: 0xB90, symBinAddr: 0x7D40, symSize: 0xD0 }
+ - { offsetInCU: 0x75C, offset: 0x35C5D, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctFTo', symObjAddr: 0xD90, symBinAddr: 0x7F40, symSize: 0xD0 }
+ - { offsetInCU: 0x83A, offset: 0x35D3B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfcTo', symObjAddr: 0xEB0, symBinAddr: 0x8060, symSize: 0x30 }
+ - { offsetInCU: 0x8A2, offset: 0x35DA3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCMa', symObjAddr: 0xF00, symBinAddr: 0x80B0, symSize: 0x20 }
+ - { offsetInCU: 0x8B6, offset: 0x35DB7, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative17NSCStatusCallbackCMa', symObjAddr: 0xF20, symBinAddr: 0x80D0, symSize: 0x20 }
+ - { offsetInCU: 0x8CA, offset: 0x35DCB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative11NSCCallbackCMa', symObjAddr: 0xF40, symBinAddr: 0x80F0, symSize: 0x20 }
+ - { offsetInCU: 0x8DE, offset: 0x35DDF, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASQWb', symObjAddr: 0xF60, symBinAddr: 0x8110, symSize: 0x10 }
+ - { offsetInCU: 0x8F2, offset: 0x35DF3, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOACSQAAWl', symObjAddr: 0xF70, symBinAddr: 0x8120, symSize: 0x30 }
+ - { offsetInCU: 0x906, offset: 0x35E07, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOMa', symObjAddr: 0xFA0, symBinAddr: 0x8150, symSize: 0x10 }
+ - { offsetInCU: 0x91A, offset: 0x35E1B, size: 0x8, addend: 0x0, symName: '_$sSo8NSStringCSgIeyBy_SSSgIegg_TRTA', symObjAddr: 0x1080, symBinAddr: 0x8230, symSize: 0x10 }
+ - { offsetInCU: 0x939, offset: 0x35E3A, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOIeyBy_ACIegy_TRTA', symObjAddr: 0x10B0, symBinAddr: 0x8240, symSize: 0x20 }
+ - { offsetInCU: 0x973, offset: 0x35E74, size: 0x8, addend: 0x0, symName: '_$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF15WebServerNative15NSCServerStatusO_Tgq5', symObjAddr: 0x0, symBinAddr: 0x71B0, symSize: 0x50 }
+ - { offsetInCU: 0x9F4, offset: 0x35EF5, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSQAASQ2eeoiySbx_xtFZTW', symObjAddr: 0x100, symBinAddr: 0x72B0, symSize: 0x10 }
+ - { offsetInCU: 0xA7A, offset: 0x35F7B, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH9hashValueSivgTW', symObjAddr: 0x110, symBinAddr: 0x72C0, symSize: 0x60 }
+ - { offsetInCU: 0xB26, offset: 0x36027, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH4hash4intoys6HasherVz_tFTW', symObjAddr: 0x170, symBinAddr: 0x7320, symSize: 0x40 }
+ - { offsetInCU: 0xB96, offset: 0x36097, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusOSHAASH13_rawHashValue4seedS2i_tFTW', symObjAddr: 0x1B0, symBinAddr: 0x7360, symSize: 0x60 }
+ - { offsetInCU: 0xD6D, offset: 0x3626E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueACSgSi_tcfC', symObjAddr: 0xB0, symBinAddr: 0x7260, symSize: 0x10 }
+ - { offsetInCU: 0xD81, offset: 0x36282, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative15NSCServerStatusO8rawValueSivg', symObjAddr: 0xC0, symBinAddr: 0x7270, symSize: 0x40 }
+ - { offsetInCU: 0xE78, offset: 0x36379, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfC', symObjAddr: 0x410, symBinAddr: 0x75C0, symSize: 0x80 }
+ - { offsetInCU: 0xE93, offset: 0x36394, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCyACSb_S3SSgADs5Int16Vs6UInt32VSbtcfc', symObjAddr: 0x490, symBinAddr: 0x7640, symSize: 0x240 }
+ - { offsetInCU: 0xFB8, offset: 0x364B9, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCfD', symObjAddr: 0x790, symBinAddr: 0x7940, symSize: 0x50 }
+ - { offsetInCU: 0x1021, offset: 0x36522, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC6statusAA0D6StatusOvg', symObjAddr: 0x870, symBinAddr: 0x7A20, symSize: 0x30 }
+ - { offsetInCU: 0x10A7, offset: 0x365A8, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgF', symObjAddr: 0x8A0, symBinAddr: 0x7A50, symSize: 0xD0 }
+ - { offsetInCU: 0x11F3, offset: 0x366F4, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFySo07CServerF0V_SvSgtcfU_', symObjAddr: 0x970, symBinAddr: 0x7B20, symSize: 0x110 }
+ - { offsetInCU: 0x12AA, offset: 0x367AB, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC23setStatusChangeCallbackyyyAA0dF0OcSgFySo07CServerF0V_SvSgtcfU_To', symObjAddr: 0xA80, symBinAddr: 0x7C30, symSize: 0x10 }
+ - { offsetInCU: 0x1315, offset: 0x36816, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC5startyyySSSgcF', symObjAddr: 0xB10, symBinAddr: 0x7CC0, symSize: 0x80 }
+ - { offsetInCU: 0x141D, offset: 0x3691E, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctF', symObjAddr: 0xC60, symBinAddr: 0x7E10, symSize: 0x90 }
+ - { offsetInCU: 0x14CD, offset: 0x369CE, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerC4stopyySb_ySSSgctFySpys4Int8VGSg_SvSgtcfU_To', symObjAddr: 0xD80, symBinAddr: 0x7F30, symSize: 0x10 }
+ - { offsetInCU: 0x1553, offset: 0x36A54, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfC', symObjAddr: 0xE60, symBinAddr: 0x8010, symSize: 0x20 }
+ - { offsetInCU: 0x1567, offset: 0x36A68, size: 0x8, addend: 0x0, symName: '_$s15WebServerNative9NSCServerCACycfc', symObjAddr: 0xE80, symBinAddr: 0x8030, symSize: 0x30 }
+...
diff --git a/packages/nativescript-web-server/project.json b/packages/nativescript-web-server/project.json
new file mode 100644
index 00000000..f8d5ae9b
--- /dev/null
+++ b/packages/nativescript-web-server/project.json
@@ -0,0 +1,82 @@
+{
+ "name": "nativescript-web-server",
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "projectType": "library",
+ "sourceRoot": "packages/nativescript-web-server",
+ "targets": {
+ "build": {
+ "executor": "@nrwl/js:tsc",
+ "options": {
+ "outputPath": "dist/packages/nativescript-web-server",
+ "tsConfig": "packages/nativescript-web-server/tsconfig.json",
+ "packageJson": "packages/nativescript-web-server/package.json",
+ "main": "packages/nativescript-web-server/index.d.ts",
+ "assets": [
+ "packages/nativescript-web-server/*.md",
+ "packages/nativescript-web-server/index.d.ts",
+ "LICENSE",
+ {
+ "glob": "**/*",
+ "input": "packages/nativescript-web-server/platforms/",
+ "output": "./platforms/"
+ }
+ ],
+ "dependsOn": [
+ {
+ "target": "build.all",
+ "projects": "dependencies"
+ }
+ ]
+ }
+ },
+ "build.all": {
+ "executor": "nx:run-commands",
+ "options": {
+ "commands": [
+ "node tools/scripts/build-finish.ts nativescript-web-server"
+ ],
+ "parallel": false
+ },
+ "outputs": [
+ "dist/packages/nativescript-web-server"
+ ],
+ "dependsOn": [
+ {
+ "target": "build.all",
+ "projects": "dependencies"
+ },
+ {
+ "target": "build",
+ "projects": "self"
+ }
+ ]
+ },
+ "build.native.ios.framework.release": {
+ "outputs": ["{workspaceRoot}/dist/packages"],
+ "options": {
+ "commands": ["sh webserver-build-ios.sh"],
+ "cwd": "tools/scripts",
+ "parallel": false
+ },
+ "executor": "nx:run-commands"
+ },
+ "focus": {
+ "executor": "nx:run-commands",
+ "options": {
+ "commands": [
+ "nx g @nativescript/plugin-tools:focus-packages nativescript-web-server"
+ ],
+ "parallel": false
+ }
+ },
+ "lint": {
+ "executor": "@nrwl/linter:eslint",
+ "options": {
+ "lintFilePatterns": [
+ "packages/nativescript-web-server/**/*.ts"
+ ]
+ }
+ }
+ },
+ "tags": []
+}
diff --git a/packages/nativescript-web-server/references.d.ts b/packages/nativescript-web-server/references.d.ts
new file mode 100644
index 00000000..98c5393d
--- /dev/null
+++ b/packages/nativescript-web-server/references.d.ts
@@ -0,0 +1 @@
+///
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.gitignore b/packages/nativescript-web-server/src-native/web-server-android/.gitignore
new file mode 100644
index 00000000..aa724b77
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/.gitignore b/packages/nativescript-web-server/src-native/web-server-android/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/.name b/packages/nativescript-web-server/src-native/web-server-android/.idea/.name
new file mode 100644
index 00000000..63ce9519
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/.name
@@ -0,0 +1 @@
+WebServerDemo
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/compiler.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/compiler.xml
new file mode 100644
index 00000000..b86273d9
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/deploymentTargetSelector.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/deploymentTargetSelector.xml
new file mode 100644
index 00000000..b268ef36
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/deploymentTargetSelector.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/gradle.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/gradle.xml
new file mode 100644
index 00000000..efecb61b
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/gradle.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/kotlinc.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/kotlinc.xml
new file mode 100644
index 00000000..fdf8d994
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/migrations.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/migrations.xml
new file mode 100644
index 00000000..f8051a6f
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/misc.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/misc.xml
new file mode 100644
index 00000000..74dd639e
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/runConfigurations.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/runConfigurations.xml
new file mode 100644
index 00000000..16660f1d
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/runConfigurations.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/.idea/vcs.xml b/packages/nativescript-web-server/src-native/web-server-android/.idea/vcs.xml
new file mode 100644
index 00000000..4fce1d86
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/.gitignore b/packages/nativescript-web-server/src-native/web-server-android/app/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/build.gradle b/packages/nativescript-web-server/src-native/web-server-android/app/build.gradle
new file mode 100644
index 00000000..1f5285bb
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/build.gradle
@@ -0,0 +1,45 @@
+plugins {
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.kotlin.android)
+}
+
+android {
+ namespace 'io.nstudio.plugins.webserver.webserverdemo'
+ compileSdk 34
+
+ defaultConfig {
+ applicationId "io.nstudio.plugins.webserver.webserverdemo"
+ minSdk 21
+ targetSdk 34
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+}
+
+dependencies {
+
+ implementation libs.androidx.core.ktx
+ implementation libs.androidx.appcompat
+ implementation libs.material
+ implementation libs.androidx.activity
+ implementation libs.androidx.constraintlayout
+ testImplementation libs.junit
+ androidTestImplementation libs.androidx.junit
+ androidTestImplementation libs.androidx.espresso.core
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/proguard-rules.pro b/packages/nativescript-web-server/src-native/web-server-android/app/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/androidTest/java/io/nstudio/plugins/webserver/webserverdemo/ExampleInstrumentedTest.kt b/packages/nativescript-web-server/src-native/web-server-android/app/src/androidTest/java/io/nstudio/plugins/webserver/webserverdemo/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..6d90c5b5
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/androidTest/java/io/nstudio/plugins/webserver/webserverdemo/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package io.nstudio.plugins.webserver.webserverdemo
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("io.nstudio.plugins.webserver.webserverdemo", appContext.packageName)
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/AndroidManifest.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..cd77294d
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/java/io/nstudio/plugins/webserver/webserverdemo/MainActivity.kt b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/java/io/nstudio/plugins/webserver/webserverdemo/MainActivity.kt
new file mode 100644
index 00000000..74e8bf78
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/java/io/nstudio/plugins/webserver/webserverdemo/MainActivity.kt
@@ -0,0 +1,20 @@
+package io.nstudio.plugins.webserver.webserverdemo
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+
+class MainActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContentView(R.layout.activity_main)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 00000000..7706ab9e
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/drawable/ic_launcher_background.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..07d5da9c
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/layout/activity_main.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..24d17df2
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..b3e26b4c
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..b3e26b4c
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 00000000..c209e78e
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..b2dfe3d1
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 00000000..4f0f1d64
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..62b611da
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 00000000..948a3070
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..1b9a6956
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..28d4b77f
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..9287f508
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..aa7d6427
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..9126ae37
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values-night/themes.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values-night/themes.xml
new file mode 100644
index 00000000..1d8f87e1
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/colors.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..768b058a
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/colors.xml
@@ -0,0 +1,5 @@
+
+
+ #FF000000
+ #FFFFFFFF
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/strings.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..20d26df0
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ WebServerDemo
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/themes.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/themes.xml
new file mode 100644
index 00000000..555061f5
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/values/themes.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/xml/backup_rules.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 00000000..148c18b6
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/xml/data_extraction_rules.xml b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 00000000..0c4f95ca
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/app/src/test/java/io/nstudio/plugins/webserver/webserverdemo/ExampleUnitTest.kt b/packages/nativescript-web-server/src-native/web-server-android/app/src/test/java/io/nstudio/plugins/webserver/webserverdemo/ExampleUnitTest.kt
new file mode 100644
index 00000000..1a699093
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/app/src/test/java/io/nstudio/plugins/webserver/webserverdemo/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package io.nstudio.plugins.webserver.webserverdemo
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/build.gradle b/packages/nativescript-web-server/src-native/web-server-android/build.gradle
new file mode 100644
index 00000000..39ad8c6a
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/build.gradle
@@ -0,0 +1,6 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.kotlin.android) apply false
+ alias(libs.plugins.android.library) apply false
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/gradle.properties b/packages/nativescript-web-server/src-native/web-server-android/gradle.properties
new file mode 100644
index 00000000..132244e5
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/gradle.properties
@@ -0,0 +1,23 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. For more details, visit
+# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
diff --git a/packages/nativescript-web-server/src-native/web-server-android/gradle/libs.versions.toml b/packages/nativescript-web-server/src-native/web-server-android/gradle/libs.versions.toml
new file mode 100644
index 00000000..ef778e12
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/gradle/libs.versions.toml
@@ -0,0 +1,27 @@
+[versions]
+agp = "8.6.1"
+kotlin = "1.9.0"
+coreKtx = "1.13.1"
+junit = "4.13.2"
+junitVersion = "1.2.1"
+espressoCore = "3.6.1"
+appcompat = "1.7.0"
+material = "1.12.0"
+activity = "1.8.0"
+constraintlayout = "2.1.4"
+
+[libraries]
+androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
+junit = { group = "junit", name = "junit", version.ref = "junit" }
+androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
+androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
+androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
+material = { group = "com.google.android.material", name = "material", version.ref = "material" }
+androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
+androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
+
+[plugins]
+android-application = { id = "com.android.application", version.ref = "agp" }
+kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
+android-library = { id = "com.android.library", version.ref = "agp" }
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/gradle/wrapper/gradle-wrapper.jar b/packages/nativescript-web-server/src-native/web-server-android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..e708b1c0
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/gradle/wrapper/gradle-wrapper.properties b/packages/nativescript-web-server/src-native/web-server-android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..9ea39d1e
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Oct 21 01:40:58 AST 2024
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/packages/nativescript-web-server/src-native/web-server-android/gradlew b/packages/nativescript-web-server/src-native/web-server-android/gradlew
new file mode 100755
index 00000000..4f906e0c
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# 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.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/packages/nativescript-web-server/src-native/web-server-android/gradlew.bat b/packages/nativescript-web-server/src-native/web-server-android/gradlew.bat
new file mode 100644
index 00000000..ac1b06f9
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/packages/nativescript-web-server/src-native/web-server-android/settings.gradle b/packages/nativescript-web-server/src-native/web-server-android/settings.gradle
new file mode 100644
index 00000000..75edfdbf
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/settings.gradle
@@ -0,0 +1,24 @@
+pluginManagement {
+ repositories {
+ google {
+ content {
+ includeGroupByRegex("com\\.android.*")
+ includeGroupByRegex("com\\.google.*")
+ includeGroupByRegex("androidx.*")
+ }
+ }
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.name = "WebServerDemo"
+include ':app'
+include ':webserver'
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/.gitignore b/packages/nativescript-web-server/src-native/web-server-android/webserver/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/build.gradle b/packages/nativescript-web-server/src-native/web-server-android/webserver/build.gradle
new file mode 100644
index 00000000..55abe0bd
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/build.gradle
@@ -0,0 +1,40 @@
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.android)
+}
+
+android {
+ namespace 'io.nstudio.plugins'
+ compileSdk 34
+
+ defaultConfig {
+ minSdk 22
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+}
+
+dependencies {
+
+ implementation libs.androidx.core.ktx
+ implementation libs.androidx.appcompat
+ implementation libs.material
+ testImplementation libs.junit
+ androidTestImplementation libs.androidx.junit
+ androidTestImplementation libs.androidx.espresso.core
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/consumer-rules.pro b/packages/nativescript-web-server/src-native/web-server-android/webserver/consumer-rules.pro
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/proguard-rules.pro b/packages/nativescript-web-server/src-native/web-server-android/webserver/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/androidTest/java/io/nstudio/plugins/ExampleInstrumentedTest.kt b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/androidTest/java/io/nstudio/plugins/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..0ebf0920
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/androidTest/java/io/nstudio/plugins/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package io.nstudio.plugins
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("io.nstudio.plugins.test", appContext.packageName)
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/AndroidManifest.xml b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..8bdb7e14
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/GC.kt b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/GC.kt
new file mode 100644
index 00000000..734fa63f
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/GC.kt
@@ -0,0 +1,72 @@
+package io.nstudio.plugins.webserver
+
+import java.lang.ref.PhantomReference
+import java.lang.ref.ReferenceQueue
+import java.nio.ByteBuffer
+import java.util.concurrent.Executors
+import java.util.concurrent.atomic.AtomicBoolean
+
+
+class GC {
+ interface Object {
+ fun dispose()
+ }
+
+ class BufferWrapper(private val nativePtr: Long, val value: Any) : Object {
+ override fun dispose() {
+ disposeByteBufMut(nativePtr)
+ }
+ }
+
+ private var executor = Executors.newSingleThreadExecutor()
+ private val monitoring = AtomicBoolean()
+
+ private fun startWatch() {
+ if (monitoring.get()) {
+ return
+ }
+ monitoring.set(true)
+ executor.execute {
+ while (monitoring.get()) {
+ val tmp = bufferRefQue.poll()
+ tmp?.get()?.dispose()
+ }
+ }
+ }
+
+ private fun stopWatch() {
+ monitoring.set(false)
+ executor.shutdown()
+ }
+
+ fun restartWatch() {
+ stopWatch()
+ executor = Executors.newSingleThreadExecutor()
+ startWatch()
+ }
+
+ fun watchItem(value: Object) {
+ PhantomReference(value, bufferRefQue)
+ }
+
+ companion object {
+
+ @JvmStatic
+ val bufferRefQue: ReferenceQueue = ReferenceQueue()
+
+ @JvmStatic
+ val instance = GC()
+
+ init {
+ instance.startWatch()
+ }
+
+ @JvmStatic
+ fun watchObject(key: Long, value: ByteBuffer) {
+ PhantomReference(BufferWrapper(key, value), bufferRefQue)
+ }
+
+ @JvmStatic
+ private external fun disposeByteBufMut(buffer: Long)
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/Server.kt b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/Server.kt
new file mode 100644
index 00000000..72ef7f7d
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/Server.kt
@@ -0,0 +1,102 @@
+package io.nstudio.plugins.webserver
+
+class Server(
+ logger: Boolean,
+ path: String,
+ directory: String,
+ index: String?,
+ hostName: String?,
+ port: Short,
+ workers: Int,
+ showFiles: Boolean
+) {
+ private var server: Long = init(
+ logger, path, directory, index, hostName, port, workers, showFiles
+ )
+
+
+ @Synchronized
+ @Throws(Throwable::class)
+ protected fun finalize() {
+ if (server != 0L) {
+ release(server)
+ server = 0
+ }
+ }
+
+ interface Callback {
+ fun onError(error: String)
+ fun onSuccess()
+ }
+
+ interface StatusCallback {
+ fun onChange(status: Int)
+ }
+
+ val status: Int
+ get() {
+ return status(server)
+ }
+
+ fun start(callback: Callback) {
+ start(server, callback)
+ }
+
+ fun stop(wait: Boolean, callback: Callback) {
+ stop(server, wait, callback)
+ }
+
+ fun setStatusCallback(callback: StatusCallback?) {
+ if (callback == null) {
+ clearStatusCallback(server)
+ } else {
+ setStatusCallback(server, callback)
+ }
+ }
+
+
+ companion object {
+ @JvmStatic
+ private external fun init(
+ logger: Boolean,
+ path: String,
+ directory: String,
+ index: String?,
+ hostName: String?,
+ port: Short,
+ workers: Int,
+ showFiles: Boolean,
+ ): Long
+
+ @JvmStatic
+ private external fun release(
+ server: Long
+ )
+
+ @JvmStatic
+ private external fun start(
+ server: Long, callback: Callback
+ )
+
+ @JvmStatic
+ private external fun stop(
+ server: Long, wait: Boolean, callback: Callback
+ )
+
+ @JvmStatic
+ private external fun setStatusCallback(
+ server: Long, callback: StatusCallback
+ )
+
+ @JvmStatic
+ private external fun clearStatusCallback(
+ server: Long
+ )
+
+
+ @JvmStatic
+ private external fun status(
+ server: Long
+ ): Int
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/websocket/Server.kt b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/websocket/Server.kt
new file mode 100644
index 00000000..6482b251
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/java/io/nstudio/plugins/webserver/websocket/Server.kt
@@ -0,0 +1,440 @@
+package io.nstudio.plugins.webserver.websocket
+
+import java.nio.ByteBuffer
+
+
+class Server(
+ logger: Boolean,
+ path: String,
+ maxPayload: Int,
+ hostName: String?,
+ port: Short,
+ workers: Int,
+ autoPong: Boolean,
+) {
+
+ private var clients = mutableMapOf()
+
+ private var server: Long = init(
+ logger, path, maxPayload, hostName, port, workers, autoPong
+ )
+
+ class Client(native: Long, server: Server)
+
+
+ @Synchronized
+ @Throws(Throwable::class)
+ protected fun finalize() {
+ if (server != 0L) {
+ release(server)
+ server = 0
+ }
+ }
+
+ interface Callback {
+ fun onError(error: String)
+ fun onSuccess()
+ }
+
+ interface ConnectCallback {
+ fun onConnect(clientId: Long)
+ }
+
+ interface DisconnectCallback {
+ fun onDicConnect(clientId: Long, code: Short, description: String?)
+ }
+
+ interface MessageCallback {
+ fun onMessage(clientId: Long, text: String)
+
+ fun onMessage(clientId: Long, data: ByteBuffer)
+
+ fun onPing(clientId: Long, data: ByteBuffer)
+
+ fun onPong(clientId: Long, data: ByteBuffer)
+ }
+
+ interface ErrorCallback {
+ fun onError(clientId: Long, error: String)
+ }
+
+ interface StatusCallback {
+ fun onChange(status: Int)
+ }
+
+ val status: Int
+ get() {
+ return status(server)
+ }
+
+ fun start(callback: Callback) {
+ start(server, callback)
+ }
+
+ fun stop(wait: Boolean, callback: Callback) {
+ stop(server, wait, callback)
+ }
+
+ fun setStatusCallback(callback: StatusCallback?) {
+ if (callback == null) {
+ clearStatusCallback(server)
+ } else {
+ setStatusCallback(server, callback)
+ }
+ }
+
+ fun send(text: String, id: Long) {
+ sendText(server, id, text)
+ }
+
+ fun send(binary: ByteBuffer, id: Long) {
+ if (binary.isDirect) {
+ sendBinaryBuffer(server, id, binary)
+ } else {
+ sendBinaryBytes(server, id, binary.array())
+ }
+ }
+
+ fun ping(binary: ByteBuffer?, id: Long) {
+ binary?.let {
+ if (it.isDirect) {
+ sendPingBuffer(server, id, it)
+ } else {
+ sendPingBytes(server, id, it.array())
+ }
+ } ?: sendPingEmpty(server, id)
+ }
+
+ fun pong(binary: ByteBuffer?, id: Long) {
+ binary?.let {
+ if (it.isDirect) {
+ sendPongBuffer(server, id, it)
+ } else {
+ sendPongBytes(server, id, it.array())
+ }
+ } ?: sendPongEmpty(server, id)
+ }
+
+ fun broadcast(text: String) {
+ broadcastText(server, text)
+ }
+
+ fun broadcast(binary: ByteBuffer) {
+ if (binary.isDirect) {
+ broadcastBinaryBuffer(server, binary)
+ } else {
+ broadcastBinaryBytes(server, binary.array())
+ }
+ }
+
+ fun broadcastPing(binary: ByteBuffer?) {
+ binary?.let {
+ if (it.isDirect) {
+ broadcastPingBuffer(server, it)
+ } else {
+ broadcastPingBytes(server, it.array())
+ }
+ } ?: broadcastPingEmpty(server)
+ }
+
+ fun broadcastPong(binary: ByteBuffer?) {
+ binary?.let {
+ if (it.isDirect) {
+ broadcastPongBuffer(server, it)
+ } else {
+ broadcastPongBytes(server, it.array())
+ }
+ } ?: broadcastPongEmpty(server)
+ }
+
+ fun addOnMessage(callback: MessageCallback): Long {
+ return nativeAddOnMessage(server, callback)
+ }
+
+ fun removeOnMessage(id: Long) {
+ nativeRemoveOnMessage(server, id)
+ }
+
+ fun addOnPing(callback: MessageCallback): Long {
+ return nativeAddOnMessage(server, object : MessageCallback {
+ override fun onMessage(clientId: Long, text: String) {}
+
+ override fun onMessage(clientId: Long, data: ByteBuffer) {}
+
+ override fun onPing(clientId: Long, data: ByteBuffer) {
+ callback.onPing(clientId, data)
+ }
+
+ override fun onPong(clientId: Long, data: ByteBuffer) {}
+ })
+ }
+
+ fun removeOnPing(id: Long) {
+ nativeRemoveOnMessage(server, id)
+ }
+
+
+ fun addOnPong(callback: MessageCallback): Long {
+ return nativeAddOnMessage(server, object : MessageCallback {
+ override fun onMessage(clientId: Long, text: String) {}
+
+ override fun onMessage(clientId: Long, data: ByteBuffer) {}
+
+ override fun onPing(clientId: Long, data: ByteBuffer) {}
+
+ override fun onPong(clientId: Long, data: ByteBuffer) {
+ callback.onPong(clientId, data)
+ }
+ })
+ }
+
+ fun removeOnPong(id: Long) {
+ nativeRemoveOnMessage(server, id)
+ }
+
+ fun addOnConnect(callback: ConnectCallback): Long {
+ return nativeAddOnConnect(server, object : ConnectCallback {
+ override fun onConnect(clientId: Long) {
+ clients.put(clientId, Client(clientId, this@Server))
+ callback.onConnect(clientId)
+ }
+ })
+ }
+
+ fun removeOnConnect(id: Long) {
+ nativeRemoveOnConnect(server, id)
+ }
+
+
+ fun addOnDisconnect(callback: DisconnectCallback): Long {
+ return nativeAddOnDisconnect(server, callback)
+ }
+
+ fun removeOnDisconnect(id: Long) {
+ nativeRemoveOnDisconnect(server, id)
+ clients.remove(id)
+ }
+
+
+ fun addOnError(callback: ErrorCallback): Long {
+ return nativeAddOnError(server, callback)
+ }
+
+ fun removeOnError(id: Long) {
+ nativeRemoveOnError(server, id)
+ }
+
+
+ companion object {
+ @JvmStatic
+ private external fun init(
+ logger: Boolean,
+ path: String,
+ maxPayload: Int,
+ hostName: String?,
+ port: Short,
+ workers: Int,
+ autoPong: Boolean,
+ ): Long
+
+ @JvmStatic
+ private external fun release(
+ server: Long
+ )
+
+ @JvmStatic
+ private external fun start(
+ server: Long, callback: Callback
+ )
+
+ @JvmStatic
+ private external fun stop(
+ server: Long, wait: Boolean, callback: Callback
+ )
+
+ @JvmStatic
+ private external fun setStatusCallback(
+ server: Long, callback: StatusCallback
+ )
+
+ @JvmStatic
+ private external fun clearStatusCallback(
+ server: Long
+ )
+
+ @JvmStatic
+ private external fun status(
+ server: Long
+ ): Int
+
+ @JvmStatic
+ private external fun hasClient(
+ server: Long, clientId: Long
+ ): Boolean
+
+ @JvmStatic
+ private external fun sendPingEmpty(
+ server: Long,
+ clientId: Long
+ )
+
+ @JvmStatic
+ private external fun sendPingBytes(
+ server: Long,
+ clientId: Long,
+ data: ByteArray,
+ )
+
+ @JvmStatic
+ private external fun broadcastPingEmpty(
+ server: Long
+ )
+
+ @JvmStatic
+ private external fun broadcastPingBytes(
+ server: Long,
+ data: ByteArray,
+ )
+
+ @JvmStatic
+ private external fun sendPingBuffer(
+ server: Long,
+ clientId: Long,
+ data: ByteBuffer,
+ )
+
+ @JvmStatic
+ private external fun broadcastPingBuffer(
+ server: Long,
+ data: ByteBuffer,
+ )
+
+ @JvmStatic
+ private external fun sendPongEmpty(
+ server: Long,
+ clientId: Long
+ )
+
+
+ @JvmStatic
+ private external fun sendPongBytes(
+ server: Long,
+ clientId: Long,
+ data: ByteArray,
+ )
+
+ @JvmStatic
+ private external fun broadcastPongEmpty(
+ server: Long
+ )
+
+ @JvmStatic
+ private external fun broadcastPongBytes(
+ server: Long,
+ data: ByteArray,
+ )
+
+ @JvmStatic
+ private external fun sendPongBuffer(
+ server: Long,
+ clientId: Long,
+ data: ByteBuffer,
+ )
+
+ @JvmStatic
+ private external fun broadcastPongBuffer(
+ server: Long,
+ data: ByteBuffer,
+ )
+
+
+ @JvmStatic
+ private external fun sendText(
+ server: Long,
+ clientId: Long,
+ text: String,
+ )
+
+ @JvmStatic
+ private external fun broadcastText(
+ server: Long,
+ text: String,
+ )
+
+
+ @JvmStatic
+ private external fun sendBinaryBytes(
+ server: Long,
+ clientId: Long,
+ data: ByteArray,
+ )
+
+ @JvmStatic
+ private external fun broadcastBinaryBytes(
+ server: Long,
+ data: ByteArray,
+ )
+
+ @JvmStatic
+ private external fun sendBinaryBuffer(
+ server: Long,
+ clientId: Long,
+ data: ByteBuffer,
+ )
+
+ @JvmStatic
+ private external fun broadcastBinaryBuffer(
+ server: Long,
+ data: ByteBuffer,
+ )
+
+ @JvmStatic
+ private external fun nativeAddOnConnect(
+ server: Long,
+ callback: ConnectCallback,
+ ): Long
+
+ @JvmStatic
+ private external fun nativeRemoveOnConnect(
+ server: Long,
+ id: Long
+ )
+
+ @JvmStatic
+ private external fun nativeAddOnDisconnect(
+ server: Long,
+ callback: DisconnectCallback,
+ ): Long
+
+ @JvmStatic
+ private external fun nativeRemoveOnDisconnect(
+ server: Long,
+ id: Long
+ )
+
+ @JvmStatic
+ external fun nativeAddOnMessage(
+ server: Long,
+ callback: MessageCallback,
+ ): Long
+
+ @JvmStatic
+ private external fun nativeRemoveOnMessage(
+ server: Long,
+ id: Long
+ )
+
+ @JvmStatic
+ private external fun nativeAddOnError(
+ server: Long,
+ callback: ErrorCallback,
+ ): Long
+
+ @JvmStatic
+ private external fun nativeRemoveOnError(
+ server: Long,
+ id: Long
+ )
+
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/arm64-v8a/libwebservernative.so b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/arm64-v8a/libwebservernative.so
new file mode 100755
index 00000000..8d88c943
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/arm64-v8a/libwebservernative.so differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/armeabi-v7a/libwebservernative.so b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/armeabi-v7a/libwebservernative.so
new file mode 100755
index 00000000..db8fdaf0
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/armeabi-v7a/libwebservernative.so differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/x86/libwebservernative.so b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/x86/libwebservernative.so
new file mode 100755
index 00000000..228a71ca
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/x86/libwebservernative.so differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/x86_64/libwebservernative.so b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/x86_64/libwebservernative.so
new file mode 100755
index 00000000..007a9c22
Binary files /dev/null and b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/main/jniLibs/x86_64/libwebservernative.so differ
diff --git a/packages/nativescript-web-server/src-native/web-server-android/webserver/src/test/java/io/nstudio/plugins/ExampleUnitTest.kt b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/test/java/io/nstudio/plugins/ExampleUnitTest.kt
new file mode 100644
index 00000000..5b66416d
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-android/webserver/src/test/java/io/nstudio/plugins/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package io.nstudio.plugins
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative.xcodeproj/project.pbxproj b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..246e278a
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative.xcodeproj/project.pbxproj
@@ -0,0 +1,591 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 56;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ F19D12D62CD7D3F400738651 /* NSCWebSocketServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F19D12D52CD7D3F300738651 /* NSCWebSocketServer.swift */; };
+ F1B814E72CC569B7006DCAB9 /* WebServerNative.docc in Sources */ = {isa = PBXBuildFile; fileRef = F1B814E62CC569B7006DCAB9 /* WebServerNative.docc */; };
+ F1B814ED2CC569B7006DCAB9 /* WebServerNative.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1B814E22CC569B7006DCAB9 /* WebServerNative.framework */; };
+ F1B814F22CC569B7006DCAB9 /* WebServerNativeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B814F12CC569B7006DCAB9 /* WebServerNativeTests.swift */; };
+ F1B814F32CC569B7006DCAB9 /* WebServerNative.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B814E52CC569B7006DCAB9 /* WebServerNative.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F1B815022CC59574006DCAB9 /* NSCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B815012CC59574006DCAB9 /* NSCServer.swift */; };
+ F1B815042CC59693006DCAB9 /* web_server_native.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B815032CC59693006DCAB9 /* web_server_native.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F1B815082CC5C061006DCAB9 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F1B815072CC5C061006DCAB9 /* libresolv.tbd */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ F1B814EE2CC569B7006DCAB9 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = F1B814D92CC569B7006DCAB9 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F1B814E12CC569B7006DCAB9;
+ remoteInfo = WebServerNative;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ F19D12D52CD7D3F300738651 /* NSCWebSocketServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSCWebSocketServer.swift; sourceTree = ""; };
+ F1B814E22CC569B7006DCAB9 /* WebServerNative.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WebServerNative.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F1B814E52CC569B7006DCAB9 /* WebServerNative.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebServerNative.h; sourceTree = ""; };
+ F1B814E62CC569B7006DCAB9 /* WebServerNative.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = WebServerNative.docc; sourceTree = ""; };
+ F1B814EC2CC569B7006DCAB9 /* WebServerNativeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebServerNativeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ F1B814F12CC569B7006DCAB9 /* WebServerNativeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebServerNativeTests.swift; sourceTree = ""; };
+ F1B815012CC59574006DCAB9 /* NSCServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSCServer.swift; sourceTree = ""; };
+ F1B815032CC59693006DCAB9 /* web_server_native.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = web_server_native.h; path = WebServerNative/include/web_server_native.h; sourceTree = ""; };
+ F1B815072CC5C061006DCAB9 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS17.5.sdk/usr/lib/libresolv.tbd; sourceTree = DEVELOPER_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ F1B814DF2CC569B7006DCAB9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F1B815082CC5C061006DCAB9 /* libresolv.tbd in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F1B814E92CC569B7006DCAB9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F1B814ED2CC569B7006DCAB9 /* WebServerNative.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ F1B814D82CC569B7006DCAB9 = {
+ isa = PBXGroup;
+ children = (
+ F1B815032CC59693006DCAB9 /* web_server_native.h */,
+ F1B814E42CC569B7006DCAB9 /* WebServerNative */,
+ F1B814F02CC569B7006DCAB9 /* WebServerNativeTests */,
+ F1B814E32CC569B7006DCAB9 /* Products */,
+ F1B815062CC5C061006DCAB9 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ F1B814E32CC569B7006DCAB9 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ F1B814E22CC569B7006DCAB9 /* WebServerNative.framework */,
+ F1B814EC2CC569B7006DCAB9 /* WebServerNativeTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ F1B814E42CC569B7006DCAB9 /* WebServerNative */ = {
+ isa = PBXGroup;
+ children = (
+ F1B814E52CC569B7006DCAB9 /* WebServerNative.h */,
+ F1B814E62CC569B7006DCAB9 /* WebServerNative.docc */,
+ F1B815012CC59574006DCAB9 /* NSCServer.swift */,
+ F19D12D52CD7D3F300738651 /* NSCWebSocketServer.swift */,
+ );
+ path = WebServerNative;
+ sourceTree = "";
+ };
+ F1B814F02CC569B7006DCAB9 /* WebServerNativeTests */ = {
+ isa = PBXGroup;
+ children = (
+ F1B814F12CC569B7006DCAB9 /* WebServerNativeTests.swift */,
+ );
+ path = WebServerNativeTests;
+ sourceTree = "";
+ };
+ F1B815062CC5C061006DCAB9 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ F1B815072CC5C061006DCAB9 /* libresolv.tbd */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ F1B814DD2CC569B7006DCAB9 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F1B814F32CC569B7006DCAB9 /* WebServerNative.h in Headers */,
+ F1B815042CC59693006DCAB9 /* web_server_native.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ F1B814E12CC569B7006DCAB9 /* WebServerNative */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F1B814F62CC569B7006DCAB9 /* Build configuration list for PBXNativeTarget "WebServerNative" */;
+ buildPhases = (
+ F1B814FD2CC56E78006DCAB9 /* PreBuild Server */,
+ F1B814DD2CC569B7006DCAB9 /* Headers */,
+ F1B814DE2CC569B7006DCAB9 /* Sources */,
+ F1B814DF2CC569B7006DCAB9 /* Frameworks */,
+ F1B814E02CC569B7006DCAB9 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = WebServerNative;
+ productName = WebServerNative;
+ productReference = F1B814E22CC569B7006DCAB9 /* WebServerNative.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ F1B814EB2CC569B7006DCAB9 /* WebServerNativeTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F1B814F92CC569B7006DCAB9 /* Build configuration list for PBXNativeTarget "WebServerNativeTests" */;
+ buildPhases = (
+ F1B814E82CC569B7006DCAB9 /* Sources */,
+ F1B814E92CC569B7006DCAB9 /* Frameworks */,
+ F1B814EA2CC569B7006DCAB9 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ F1B814EF2CC569B7006DCAB9 /* PBXTargetDependency */,
+ );
+ name = WebServerNativeTests;
+ productName = WebServerNativeTests;
+ productReference = F1B814EC2CC569B7006DCAB9 /* WebServerNativeTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ F1B814D92CC569B7006DCAB9 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastSwiftUpdateCheck = 1540;
+ LastUpgradeCheck = 1540;
+ TargetAttributes = {
+ F1B814E12CC569B7006DCAB9 = {
+ CreatedOnToolsVersion = 15.4;
+ };
+ F1B814EB2CC569B7006DCAB9 = {
+ CreatedOnToolsVersion = 15.4;
+ };
+ };
+ };
+ buildConfigurationList = F1B814DC2CC569B7006DCAB9 /* Build configuration list for PBXProject "WebServerNative" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = F1B814D82CC569B7006DCAB9;
+ productRefGroup = F1B814E32CC569B7006DCAB9 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ F1B814E12CC569B7006DCAB9 /* WebServerNative */,
+ F1B814EB2CC569B7006DCAB9 /* WebServerNativeTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ F1B814E02CC569B7006DCAB9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F1B814EA2CC569B7006DCAB9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ F1B814FD2CC56E78006DCAB9 /* PreBuild Server */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "PreBuild Server";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "set -e\n\"$SRCROOT/pre-build.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ F1B814DE2CC569B7006DCAB9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F19D12D62CD7D3F400738651 /* NSCWebSocketServer.swift in Sources */,
+ F1B814E72CC569B7006DCAB9 /* WebServerNative.docc in Sources */,
+ F1B815022CC59574006DCAB9 /* NSCServer.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F1B814E82CC569B7006DCAB9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F1B814F22CC569B7006DCAB9 /* WebServerNativeTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ F1B814EF2CC569B7006DCAB9 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F1B814E12CC569B7006DCAB9 /* WebServerNative */;
+ targetProxy = F1B814EE2CC569B7006DCAB9 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ F1B814F42CC569B7006DCAB9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ F1B814F52CC569B7006DCAB9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ F1B814F72CC569B7006DCAB9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GENERATE_INFOPLIST_FILE = YES;
+ HEADER_SEARCH_PATHS = "\"$(SRCROOT)/WebServerNative/include\"";
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = (
+ "@executable_path/../Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 14.5;
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ "OTHER_LDFLAGS[sdk=iphoneos*][arch=arm64]" = (
+ "$(inherited)",
+ "-L\"$(SRCROOT)/../web-server-native/target/aarch64-apple-ios/debug\"",
+ "-Wl,-no_compact_unwind",
+ "-lwebservernative",
+ "-ObjC",
+ );
+ "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=arm64]" = (
+ "$(inherited)",
+ "-L\"$(SRCROOT)/../web-server-native/target/aarch64-apple-ios-sim/debug\"",
+ "-Wl,-no_compact_unwind",
+ "-lwebservernative",
+ "-ObjC",
+ );
+ "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=x86_64]" = (
+ "$(inherited)",
+ "-L\"$(SRCROOT)/../web-server-native/target/x86_64-apple-ios/debug\"",
+ "-Wl,-no_compact_unwind",
+ "-lwebservernative",
+ "-ObjC",
+ );
+ OTHER_SWIFT_FLAGS = "-Xcc -Wno-error=non-modular-include-in-framework-module";
+ PRODUCT_BUNDLE_IDENTIFIER = io.nstudio.plugins.webserver.WebServerNative;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SDKROOT = auto;
+ SKIP_INSTALL = YES;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ F1B814F82CC569B7006DCAB9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = NO;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ GENERATE_INFOPLIST_FILE = YES;
+ HEADER_SEARCH_PATHS = "\"$(SRCROOT)/WebServerNative/include\"";
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = (
+ "@executable_path/../Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 14.5;
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ "OTHER_LDFLAGS[sdk=iphoneos*][arch=arm64]" = (
+ "$(inherited)",
+ "-L\"$(SRCROOT)/../web-server-native/target/aarch64-apple-ios/release\"",
+ "-lwebservernative",
+ "-Wl,-no_compact_unwind",
+ "-ObjC",
+ );
+ "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=arm64]" = (
+ "$(inherited)",
+ "-L\"$(SRCROOT)/../web-server-native/target/aarch64-apple-ios-sim/release\"",
+ "-Wl,-no_compact_unwind",
+ "-lwebservernative",
+ "-ObjC",
+ );
+ "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=x86_64]" = (
+ "$(inherited)",
+ "-L\"$(SRCROOT)/../web-server-native/target/x86_64-apple-ios/release\"",
+ "-lwebservernative",
+ "-Wl,-no_compact_unwind",
+ "-ObjC",
+ );
+ OTHER_SWIFT_FLAGS = "-Xcc -Wno-error=non-modular-include-in-framework-module";
+ PRODUCT_BUNDLE_IDENTIFIER = io.nstudio.plugins.webserver.WebServerNative;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SDKROOT = auto;
+ SKIP_INSTALL = YES;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ F1B814FA2CC569B7006DCAB9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.5;
+ MACOSX_DEPLOYMENT_TARGET = 14.5;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.nstudio.plugins.webserver.WebServerNativeTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ F1B814FB2CC569B7006DCAB9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 17.5;
+ MACOSX_DEPLOYMENT_TARGET = 14.5;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.nstudio.plugins.webserver.WebServerNativeTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = auto;
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
+ SWIFT_EMIT_LOC_STRINGS = NO;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ F1B814DC2CC569B7006DCAB9 /* Build configuration list for PBXProject "WebServerNative" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F1B814F42CC569B7006DCAB9 /* Debug */,
+ F1B814F52CC569B7006DCAB9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F1B814F62CC569B7006DCAB9 /* Build configuration list for PBXNativeTarget "WebServerNative" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F1B814F72CC569B7006DCAB9 /* Debug */,
+ F1B814F82CC569B7006DCAB9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F1B814F92CC569B7006DCAB9 /* Build configuration list for PBXNativeTarget "WebServerNativeTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F1B814FA2CC569B7006DCAB9 /* Debug */,
+ F1B814FB2CC569B7006DCAB9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = F1B814D92CC569B7006DCAB9 /* Project object */;
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/NSCServer.swift b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/NSCServer.swift
new file mode 100644
index 00000000..9a01c027
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/NSCServer.swift
@@ -0,0 +1,195 @@
+//
+// NSCServer.swift
+// WebServerNative
+//
+// Created by Osei Fortune on 20/10/2024.
+//
+
+import Foundation
+
+
+@objc(NSCServerStatus)
+public enum NSCServerStatus: Int, RawRepresentable {
+ public typealias RawValue = Int
+ case Inactive
+ case Active
+ case Crashed
+ case Starting
+ case Stopping
+
+ public init?(rawValue: Int) {
+ switch rawValue {
+ case 0:
+ self = NSCServerStatus.Inactive
+ case 1:
+ self = NSCServerStatus.Active
+ case 2:
+ self = NSCServerStatus.Crashed
+ case 3:
+ self = NSCServerStatus.Starting
+ case 4:
+ self = NSCServerStatus.Stopping
+ default:
+ return nil
+ }
+ }
+
+ public var rawValue: RawValue {
+ switch self {
+ case .Inactive:
+ return 0
+ case .Active:
+ return 1
+ case .Crashed:
+ return 2
+ case .Starting:
+ return 3
+ case .Stopping:
+ return 4
+ }
+ }
+}
+
+
+class NSCCallback: NSObject {
+ var callback: (String?) -> Void
+ init(callback: @escaping (String?) -> Void) {
+ self.callback = callback
+ }
+}
+
+class NSCStatusCallback: NSObject {
+ var callback: (NSCServerStatus) -> Void
+ init(callback: @escaping (NSCServerStatus) -> Void) {
+ self.callback = callback
+ }
+}
+
+
+@objcMembers
+@objc(NSCServer)
+public class NSCServer: NSObject {
+ var server: OpaquePointer?
+ var statusCallback: UnsafeRawPointer?
+ public init(_ logger: Bool, _ path: String, _ directory: String, _ index: String?, _ hostName: String?, _ port: Int16, _ workers: UInt32, _ showFiles: Bool) {
+ super.init()
+ let cPath = (path as NSString).utf8String!
+ let cDirectory = (directory as NSString).utf8String!
+
+
+ var options = CStaticServiceOptions(logger: logger, path: cPath, directory: cDirectory, index: nil, host_name: nil, port: port, workers: workers, show_files: showFiles)
+
+ if(index != nil){
+ let cIndex = (index! as NSString).utf8String!
+ options.index = cIndex
+ }
+
+ if(hostName != nil){
+ let cHostName = (hostName! as NSString).utf8String!
+ options.host_name = cHostName
+ }
+
+ server = webserver_init(&options)
+ }
+
+ deinit {
+ guard let statusCallback = statusCallback else {
+ return
+ }
+
+ let _ = Unmanaged.fromOpaque(statusCallback).takeRetainedValue()
+
+ }
+
+ public var status: NSCServerStatus {
+ get {
+ switch webserver_status(server) {
+ case CServerStatus_Inactive:
+ return .Inactive
+ case CServerStatus_Active:
+ return .Active
+ case CServerStatus_Crashed:
+ return .Crashed
+ case CServerStatus_Starting:
+ return .Starting
+ case CServerStatus_Stopping:
+ return .Stopping
+ default:
+ return .Inactive
+ }
+
+ }
+ }
+
+
+ public func setStatusChangeCallback(_ callback:((NSCServerStatus) -> Void)?){
+ if(statusCallback != nil){
+ let _ = Unmanaged.fromOpaque(statusCallback!).takeRetainedValue()
+ }
+
+ guard let callback = callback else {
+ webserver_clear_status_callback(server)
+ return
+ }
+
+ let data = NSCStatusCallback(callback: callback)
+
+ let pointer = Unmanaged.passRetained(data).toOpaque()
+ statusCallback = pointer.load(as: UnsafeRawPointer.self)
+ webserver_set_status_callback(server, pointer) { status, data in
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ switch status {
+ case CServerStatus_Inactive:
+ cb.callback(.Inactive)
+ break
+ case CServerStatus_Active:
+ cb.callback(.Active)
+ break
+ case CServerStatus_Crashed:
+ cb.callback(.Crashed)
+ break
+ case CServerStatus_Starting:
+ cb.callback(.Starting)
+ break
+ case CServerStatus_Stopping:
+ cb.callback(.Stopping)
+ break
+ default:
+ cb.callback(.Inactive)
+ break
+ }
+ }
+ }
+
+ public func start(_ callback: @escaping (String?) -> Void){
+ let data = NSCCallback(callback: callback)
+ let pointer = Unmanaged.passRetained(data).toOpaque()
+ webserver_start(server, pointer) { error, data in
+ var ret: String? = nil
+ if(error != nil){
+ ret = String(cString: error!)
+ webserver_error_release(error!)
+ }
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeRetainedValue()
+ cb.callback(ret)
+ }
+ }
+ }
+
+ public func stop(_ wait: Bool, _ callback: @escaping (String?) -> Void){
+ let data = NSCCallback(callback: callback)
+ let pointer = Unmanaged.passRetained(data).toOpaque()
+ webserver_stop(server, wait, pointer) { error, data in
+ var ret: String? = nil
+ if(error != nil){
+ ret = String(cString: error!)
+ webserver_error_release(error!)
+ }
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeRetainedValue()
+ cb.callback(ret)
+ }
+ }
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/NSCWebSocketServer.swift b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/NSCWebSocketServer.swift
new file mode 100644
index 00000000..3bcf4cfa
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/NSCWebSocketServer.swift
@@ -0,0 +1,625 @@
+//
+// NSCWebSocketServer.swift
+// WebServerNative
+//
+// Created by Osei Fortune on 03/11/2024.
+//
+
+import Foundation
+
+
+@objc(NSCMessageType)
+public enum NSCMessageType: Int, RawRepresentable {
+ public typealias RawValue = Int
+ case Text
+ case Binary
+ case Ping
+ case Pong
+
+ public init?(rawValue: Int) {
+ switch rawValue {
+ case 0:
+ self = .Text
+ case 1:
+ self = .Binary
+ case 2:
+ self = .Ping
+ case 3:
+ self = .Pong
+ default:
+ return nil
+ }
+ }
+
+ public var rawValue: RawValue {
+ switch self {
+ case .Text:
+ return 0
+ case .Binary:
+ return 1
+ case .Ping:
+ return 2
+ case .Pong:
+ return 3
+ }
+ }
+}
+
+@objc(NSCMessage)
+@objcMembers
+public class NSCMessage: NSObject {
+ var message: OpaquePointer?
+ public let type: NSCMessageType
+ private var _data: NSData? = nil
+ private var _text: String? = nil
+ init(message: OpaquePointer? = nil, type: NSCMessageType) {
+ self.message = message
+ self.type = type
+ }
+
+ public var text: String? {
+ get {
+ if(_text == nil){
+ let text = webserver_websocket_message_text(message)
+ if(text != nil){
+ _text = String(cString: text!)
+ }
+ }
+ return _text
+ }
+ }
+
+ public var data: NSData? {
+ get {
+ if(_data == nil){
+ _data = convertNSCMessageToData(self)
+ }
+ return _data
+ }
+ }
+
+ deinit {
+ if(message != nil){
+ webserver_websocket_message_release(message)
+ message = nil
+ }
+ }
+}
+
+class NSCMessageCallback: NSObject {
+ var server: NSCWebSocketServer
+ var callback: (NSCClient,NSCMessage) -> Void
+ var current: CFRunLoop
+ init(callback: @escaping (NSCClient, NSCMessage) -> Void, server: NSCWebSocketServer) {
+ self.callback = callback
+ self.server = server
+ self.current = CFRunLoopGetCurrent()
+ }
+
+ func trigger(_ client: NSCClient, _ message: NSCMessage){
+ if(current == CFRunLoopGetCurrent()){
+ callback(client,message)
+ }else {
+ CFRunLoopPerformBlock(current, CFRunLoopMode.defaultMode.rawValue) {
+ self.callback(client,message)
+ }
+ CFRunLoopWakeUp(current)
+ }
+ }
+}
+
+class NSCReasonCallback: NSObject {
+ var server: NSCWebSocketServer
+ var callback: (NSCClient,UInt16, String?) -> Void
+ var current: CFRunLoop
+ init(callback: @escaping (NSCClient, UInt16, String?) -> Void, server: NSCWebSocketServer) {
+ self.callback = callback
+ self.server = server
+ self.current = CFRunLoopGetCurrent()
+ }
+
+ func trigger(_ client: NSCClient, _ code: UInt16, _ description: String?){
+ if(current == CFRunLoopGetCurrent()){
+ callback(client,code, description)
+ }else {
+ CFRunLoopPerformBlock(current, CFRunLoopMode.defaultMode.rawValue) {
+ self.callback(client,code, description)
+ }
+ CFRunLoopWakeUp(current)
+ }
+ }
+}
+
+class NSCStringCallback: NSObject {
+ var server: NSCWebSocketServer
+ var callback: (NSCClient, String) -> Void
+ var current: CFRunLoop
+ init(callback: @escaping (NSCClient,String) -> Void, server: NSCWebSocketServer) {
+ self.callback = callback
+ self.server = server
+ self.current = CFRunLoopGetCurrent()
+ }
+
+ func trigger(_ client: NSCClient, _ data: String){
+ if(current == CFRunLoopGetCurrent()){
+ callback(client,data)
+ }else {
+ CFRunLoopPerformBlock(current, CFRunLoopMode.defaultMode.rawValue) {
+ self.callback(client,data)
+ }
+ CFRunLoopWakeUp(current)
+ }
+ }
+}
+
+class NSCDataCallback: NSObject {
+ var server: NSCWebSocketServer
+ var callback: (NSCClient, NSData?) -> Void
+ var current: CFRunLoop
+ init(callback: @escaping (NSCClient,NSData?) -> Void, server: NSCWebSocketServer) {
+ self.callback = callback
+ self.server = server
+ self.current = CFRunLoopGetCurrent()
+ }
+
+ func trigger(_ client: NSCClient, _ data: NSData?){
+ if(current == CFRunLoopGetCurrent()){
+ callback(client,data)
+ }else {
+ CFRunLoopPerformBlock(current, CFRunLoopMode.defaultMode.rawValue) {
+ self.callback(client,data)
+ }
+ CFRunLoopWakeUp(current)
+ }
+ }
+}
+
+
+class NSCConnectCallback: NSObject {
+ var server: NSCWebSocketServer
+ var callback: (NSCClient) -> Void
+ var current: CFRunLoop
+ init(callback: @escaping (NSCClient) -> Void, server: NSCWebSocketServer) {
+ self.callback = callback
+ self.server = server
+ self.current = CFRunLoopGetCurrent()
+ }
+
+
+ func trigger(_ client: NSCClient){
+ if(current == CFRunLoopGetCurrent()){
+ callback(client)
+ }else {
+ CFRunLoopPerformBlock(current, CFRunLoopMode.defaultMode.rawValue) {
+ self.callback(client)
+ }
+ CFRunLoopWakeUp(current)
+ }
+ }
+}
+
+@objc(NSCClient)
+@objcMembers
+public class NSCClient: NSObject {
+ private var client: OpaquePointer?
+ init(client: OpaquePointer? = nil) {
+ self.client = client
+ }
+ public var id: UInt64 {
+ get {
+ guard let client = client else {return 0}
+ return webserver_websocket_client_id(client)
+ }
+ }
+ deinit {
+ if(client != nil){
+ webserver_websocket_client_release(client)
+ client = nil
+ }
+ }
+}
+
+func convertMessageToData(_ message: OpaquePointer?) -> NSData? {
+ guard let message = message else {return nil}
+ let message_data = webserver_websocket_message_data(message)
+ if(message_data != nil){
+ let ptr = UnsafeMutableRawPointer(mutating: message_data!)
+ let size = webserver_websocket_message_data_size(message)
+ let data = NSData(bytesNoCopy: ptr, length: Int(size)) { _, _ in
+ webserver_websocket_message_release(message)
+ }
+ return data
+ }
+ return nil
+}
+
+func convertNSCMessageToData(_ message: NSCMessage) -> NSData? {
+ guard let msg = message.message else {return nil}
+ let message_data = webserver_websocket_message_data(msg)
+ if(message_data != nil){
+ let ptr = UnsafeMutableRawPointer(mutating: message_data!)
+ let size = webserver_websocket_message_data_size(msg)
+ let msg = Unmanaged.passRetained(message)
+ let data = NSData(bytesNoCopy: ptr, length: Int(size)) { _, _ in
+ let _ = msg.takeRetainedValue()
+ }
+ return data
+ }
+ return nil
+}
+
+func convertMessageToString(_ message: OpaquePointer?) -> String? {
+ guard let message = message else {return nil}
+ guard let message_text = webserver_websocket_message_text(message) else {return nil}
+ let text = String(cString: message_text)
+ webserver_websocket_message_release(message)
+ return text
+}
+
+@objcMembers
+@objc(NSCWebSocketServer)
+public class NSCWebSocketServer: NSObject {
+ var server: OpaquePointer?
+ var statusCallback: UnsafeRawPointer?
+ var clients: [UInt64: NSCClient] = [:]
+ var messageCallback: [UInt64: NSCMessageCallback] = [:]
+ var dataCallback: [UInt64: NSCDataCallback] = [:]
+ var connectCallback: [UInt64: NSCConnectCallback] = [:]
+ var disconnectCallback: [UInt64: NSCReasonCallback] = [:]
+ var errorCallback: [UInt64: NSCStringCallback] = [:]
+ public init(_ logger: Bool, _ path: String, _ maxPayload: Int, _ hostName: String?, _ port: Int16, _ workers: UInt32, _ autoPong: Bool) {
+ super.init()
+ let cPath = (path as NSString).utf8String!
+
+ var options = CWebSocketServiceOptions(logger: logger, path: cPath, max_payload: maxPayload, host_name: nil, port: port, workers: workers, auto_pong: autoPong)
+
+
+ if(hostName != nil){
+ let cHostName = (hostName! as NSString).utf8String!
+ options.host_name = cHostName
+ }
+
+ server = webserver_websocket_init(&options)
+ }
+
+ deinit {
+ guard let statusCallback = statusCallback else {
+ return
+ }
+
+ let _ = Unmanaged.fromOpaque(statusCallback).takeRetainedValue()
+
+ }
+
+ public func send(text: String, id: UInt64){
+ let cText = (text as NSString).utf8String!
+ webserver_websocket_send_text(server, id, cText)
+ }
+
+ public func send(binary: NSData, id: UInt64){
+ var bytes = binary.bytes
+ webserver_websocket_send_binary(server,id,bytes, UInt(binary.length))
+ }
+
+ public func send(ping: NSData, id: UInt64){
+ var bytes = ping.bytes
+ webserver_websocket_send_ping(server,id,bytes, UInt(ping.length))
+ }
+
+ public func sendEmptyPing(id: UInt64){
+ webserver_websocket_send_ping(server,id, nil, 0)
+ }
+
+ public func send(pong: NSData, id: UInt64){
+ var bytes = pong.bytes
+ webserver_websocket_send_pong(server,id,bytes, UInt(pong.length))
+ }
+
+ public func sendEmptyPong(id: UInt64){
+ webserver_websocket_send_pong(server,id, nil, 0)
+ }
+
+
+ public func broadcast(_ text: String){
+ let cText = (text as NSString).utf8String!
+ webserver_websocket_broadcast_text(server, cText)
+ }
+
+ public func broadcast(binary: NSData){
+ var bytes = binary.bytes
+ webserver_websocket_broadcast_binary(server,bytes, UInt(binary.length))
+ }
+
+ public func broadcast(ping: NSData){
+ var bytes = ping.bytes
+ webserver_websocket_broadcast_ping(server,bytes, UInt(ping.length))
+ }
+
+ public func broadcastEmptyPing(){
+ webserver_websocket_broadcast_ping(server,nil, 0)
+ }
+
+ public func broadcast(pong: NSData){
+ var bytes = pong.bytes
+ webserver_websocket_broadcast_pong(server,bytes, UInt(pong.length))
+ }
+
+ public func broadcastEmptyPong(){
+ webserver_websocket_broadcast_pong(server,nil, 0)
+ }
+
+ public func addOnMessage(_ callback: @escaping (NSCClient, NSCMessage) -> Void) -> UInt64 {
+ let data = NSCMessageCallback(callback: callback, server: self)
+ let pointer = Unmanaged.passUnretained(data).toOpaque()
+ let id = webserver_websocket_add_message_callback(server, pointer) { clientId, message, data in
+ let type = webserver_websocket_message_type(message)
+ var messageType: NSCMessageType? = nil
+ if(type == WebsocketMessageType_Text){
+ messageType = .Text
+ }else if(type == WebsocketMessageType_Binary){
+ messageType = .Binary
+ }
+
+ guard let messageType = messageType else {return}
+
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ guard let client = cb.server.clients[clientId] else {
+ // todo query ?
+ return
+ }
+ let message = NSCMessage(message: message, type: messageType)
+ cb.trigger(client,message)
+ }
+
+ }
+
+ messageCallback[id] = data
+ return id
+ }
+
+ public func removeOnMessage(_ id: UInt64){
+ webserver_websocket_remove_connect_callback(server, id)
+ messageCallback.removeValue(forKey: id)
+ }
+
+ public func addOnPing(_ callback: @escaping (NSCClient, NSData?) -> Void) -> UInt64 {
+ let data = NSCDataCallback(callback: callback, server: self)
+ let pointer = Unmanaged.passUnretained(data).toOpaque()
+ let current = CFRunLoopGetCurrent()
+ let id = webserver_websocket_add_message_callback(server, pointer) { clientId, message, data in
+ let type = webserver_websocket_message_type(message)
+ if(type == WebsocketMessageType_Ping){
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ let message_data = convertMessageToData(message)
+ guard let client = cb.server.clients[clientId] else {
+ // todo query ?
+ return
+ }
+
+ cb.trigger(client,message_data)
+ }
+ }
+ }
+
+ dataCallback[id] = data
+
+ return id
+ }
+
+ public func removeOnPing(_ id: UInt64){
+ webserver_websocket_remove_connect_callback(server, id)
+ dataCallback.removeValue(forKey: id)
+ }
+
+
+ public func addOnPong(_ callback: @escaping (NSCClient, NSData?) -> Void) -> UInt64 {
+ let data = NSCDataCallback(callback: callback, server: self)
+ let pointer = Unmanaged.passUnretained(data).toOpaque()
+ let id = webserver_websocket_add_message_callback(server, pointer) {clientId, message, data in
+ let type = webserver_websocket_message_type(message)
+ if(type == WebsocketMessageType_Pong){
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ let message_data = convertMessageToData(message)
+ guard let client = cb.server.clients[clientId] else {
+ // todo query ?
+ return
+ }
+
+ cb.trigger(client,message_data)
+
+ }
+ }
+ }
+
+ dataCallback[id] = data
+
+ return id
+ }
+
+ public func removeOnPong(_ id: UInt64){
+ webserver_websocket_remove_connect_callback(server, id)
+ dataCallback.removeValue(forKey: id)
+ }
+
+ public func addOnConnect(_ callback: @escaping (NSCClient) -> Void) -> UInt64 {
+ let data = NSCConnectCallback(callback: callback, server: self)
+ let pointer = Unmanaged.passUnretained(data).toOpaque()
+ let id = webserver_websocket_add_connect_callback(server, pointer) { clientId,data in
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ let client = webserver_websocket_client(cb.server.server, clientId)
+ guard let client = client else {return}
+ let ret = NSCClient(client: client)
+ cb.server.clients[clientId] = ret
+ cb.trigger(ret)
+ }
+ }
+
+ connectCallback[id] = data
+
+ return id
+ }
+
+ public func removeOnConnect(_ id: UInt64){
+ webserver_websocket_remove_connect_callback(server, id)
+ connectCallback.removeValue(forKey: id)
+ }
+
+
+ public func addOnDisconnect(_ callback: @escaping (NSCClient, UInt16, String?) -> Void) -> UInt64 {
+ let data = NSCReasonCallback(callback: callback, server: self)
+ let pointer = Unmanaged.passUnretained(data).toOpaque()
+ let id = webserver_websocket_add_disconnect_callback(server, pointer) {clientId, reason, data in
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ let code = webserver_websocket_reason_code(reason)
+ let cDescription = webserver_websocket_reason_description(reason)
+ var description: String? = nil
+ if(cDescription != nil){
+ description = String(cString: cDescription!)
+ webserver_error_release(cDescription)
+ }
+ webserver_websocket_reason_release(reason)
+
+ guard let client = cb.server.clients[clientId] else {
+ // todo query ?
+ return
+ }
+
+ cb.trigger(client, code, description)
+ }
+ }
+
+
+ disconnectCallback[id] = data
+
+ return id
+ }
+
+ public func removeOnDisconnect(_ id: UInt64){
+ webserver_websocket_remove_disconnect_callback(server, id)
+ disconnectCallback.removeValue(forKey: id)
+ clients.removeValue(forKey: id)
+ }
+
+
+ public func addOnError(_ callback: @escaping (NSCClient, String) -> Void) -> UInt64 {
+ let data = NSCStringCallback(callback: callback, server: self)
+ let pointer = Unmanaged.passUnretained(data).toOpaque()
+ let id = webserver_websocket_add_error_callback(server, pointer) { clientId, error, data in
+ if(data != nil && error != nil){
+ let error = String(cString: error!)
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ guard let client = cb.server.clients[clientId] else {
+ // todo query ?
+ return
+ }
+ cb.trigger(client, error)
+ }
+ }
+
+ errorCallback[id] = data
+
+ return id
+ }
+
+ public func removeOnError(_ id: UInt64){
+ webserver_websocket_remove_error_callback(server, id)
+ errorCallback.removeValue(forKey: id)
+ }
+
+ public var status: NSCServerStatus {
+ get {
+ switch webserver_websocket_status(server) {
+ case CWebsocketServerStatus_Inactive:
+ return .Inactive
+ case CWebsocketServerStatus_Active:
+ return .Active
+ case CWebsocketServerStatus_Crashed:
+ return .Crashed
+ case CWebsocketServerStatus_Starting:
+ return .Starting
+ case CWebsocketServerStatus_Stopping:
+ return .Stopping
+ default:
+ return .Inactive
+ }
+
+ }
+ }
+
+
+ public func setStatusChangeCallback(_ callback:((NSCServerStatus) -> Void)?){
+ if(statusCallback != nil){
+ let _ = Unmanaged.fromOpaque(statusCallback!).takeRetainedValue()
+ }
+
+ guard let callback = callback else {
+ webserver_clear_status_callback(server)
+ return
+ }
+
+ let data = NSCStatusCallback(callback: callback)
+
+ let pointer = Unmanaged.passRetained(data).toOpaque()
+ statusCallback = pointer.load(as: UnsafeRawPointer.self)
+ webserver_set_status_callback(server, pointer) { status, data in
+ let cb = Unmanaged.fromOpaque(data!).takeUnretainedValue()
+ switch status {
+ case CServerStatus_Inactive:
+ cb.callback(.Inactive)
+ break
+ case CServerStatus_Active:
+ cb.callback(.Active)
+ break
+ case CServerStatus_Crashed:
+ cb.callback(.Crashed)
+ break
+ case CServerStatus_Starting:
+ cb.callback(.Starting)
+ break
+ case CServerStatus_Stopping:
+ cb.callback(.Stopping)
+ break
+ default:
+ cb.callback(.Inactive)
+ break
+ }
+ }
+ }
+
+ public func start(_ callback: @escaping (String?) -> Void){
+ let data = NSCCallback(callback: callback)
+ let pointer = Unmanaged.passRetained(data).toOpaque()
+ webserver_websocket_start(server, pointer) { error, data in
+ var ret: String? = nil
+ if(error != nil){
+ ret = String(cString: error!)
+ webserver_error_release(error!)
+ }
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeRetainedValue()
+ cb.callback(ret)
+ }
+ }
+ }
+
+ public func stop(_ wait: Bool, _ callback: @escaping (String?) -> Void){
+ let data = NSCCallback(callback: callback)
+ let pointer = Unmanaged.passRetained(data).toOpaque()
+ webserver_websocket_stop(server, wait, pointer) { error, data in
+ var ret: String? = nil
+ if(error != nil){
+ ret = String(cString: error!)
+ webserver_error_release(error!)
+ }
+ if(data != nil){
+ let cb = Unmanaged.fromOpaque(data!).takeRetainedValue()
+ cb.callback(ret)
+ }
+ }
+ }
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/WebServerNative.docc/WebServerNative.md b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/WebServerNative.docc/WebServerNative.md
new file mode 100755
index 00000000..1296016f
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/WebServerNative.docc/WebServerNative.md
@@ -0,0 +1,13 @@
+# ``WebServerNative``
+
+Summary
+
+## Overview
+
+Text
+
+## Topics
+
+### Group
+
+- ``Symbol``
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/WebServerNative.h b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/WebServerNative.h
new file mode 100644
index 00000000..1a0158ba
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/WebServerNative.h
@@ -0,0 +1,25 @@
+//
+// WebServerNative.h
+// WebServerNative
+//
+// Created by Osei Fortune on 20/10/2024.
+//
+
+//#ifdef __cplusplus
+//extern "C" {
+//#endif
+
+#import
+#import "web_server_native.h"
+//! Project version number for WebServerNative.
+FOUNDATION_EXPORT double WebServerNativeVersionNumber;
+
+//! Project version string for WebServerNative.
+FOUNDATION_EXPORT const unsigned char WebServerNativeVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import
+
+//
+//#ifdef __cplusplus
+//}
+//#endif
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/include/web_server_native.h b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/include/web_server_native.h
new file mode 100644
index 00000000..bc57708e
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNative/include/web_server_native.h
@@ -0,0 +1,198 @@
+#ifndef WEBSERVER_C_H
+#define WEBSERVER_C_H
+
+/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */
+
+#include
+#include
+#include
+#include
+
+typedef enum CServerStatus {
+ CServerStatus_Inactive,
+ CServerStatus_Active,
+ CServerStatus_Crashed,
+ CServerStatus_Starting,
+ CServerStatus_Stopping,
+} CServerStatus;
+
+typedef enum CWebsocketServerStatus {
+ CWebsocketServerStatus_Inactive,
+ CWebsocketServerStatus_Active,
+ CWebsocketServerStatus_Crashed,
+ CWebsocketServerStatus_Starting,
+ CWebsocketServerStatus_Stopping,
+} CWebsocketServerStatus;
+
+typedef enum WebsocketMessageType {
+ WebsocketMessageType_Text,
+ WebsocketMessageType_Binary,
+ WebsocketMessageType_Ping,
+ WebsocketMessageType_Pong,
+} WebsocketMessageType;
+
+typedef struct CClient CClient;
+
+typedef struct CServer CServer;
+
+typedef struct CWebsocketMessage CWebsocketMessage;
+
+typedef struct CWebsocketReason CWebsocketReason;
+
+typedef struct CWebsocketServer CWebsocketServer;
+
+typedef struct CStaticServiceOptions {
+ bool logger;
+ const char *path;
+ const char *directory;
+ const char *index;
+ const char *host_name;
+ int16_t port;
+ uint32_t workers;
+ bool show_files;
+} CStaticServiceOptions;
+
+typedef struct CWebSocketServiceOptions {
+ bool logger;
+ const char *path;
+ intptr_t max_payload;
+ const char *host_name;
+ int16_t port;
+ uint32_t workers;
+ bool auto_pong;
+} CWebSocketServiceOptions;
+
+struct CServer *webserver_init(const struct CStaticServiceOptions *options);
+
+void webserver_release(struct CServer *server);
+
+void webserver_start(struct CServer *server, void *data, void (*callback)(char*, void*));
+
+void webserver_stop(struct CServer *server, bool wait, void *data, void (*callback)(char*, void*));
+
+enum CServerStatus webserver_status(struct CServer *server);
+
+void webserver_error_release(char *error);
+
+void webserver_set_status_callback(struct CServer *server,
+ void *data,
+ void (*callback)(enum CServerStatus, void*));
+
+void webserver_clear_status_callback(struct CServer *server);
+
+struct CClient *webserver_websocket_client(struct CWebsocketServer *server, uint64_t client_id);
+
+uint64_t webserver_websocket_client_id(struct CClient *client);
+
+void webserver_websocket_client_release(struct CClient *client);
+
+struct CWebsocketServer *webserver_websocket_init(const struct CWebSocketServiceOptions *options);
+
+void webserver_websocket_release(struct CWebsocketServer *server);
+
+void webserver_websocket_start(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(char*, void*));
+
+void webserver_websocket_stop(struct CWebsocketServer *server,
+ bool wait,
+ void *data,
+ void (*callback)(char*, void*));
+
+enum CWebsocketServerStatus webserver_websocket_status(struct CWebsocketServer *server);
+
+void webserver_websocket_send_ping(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_ping(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_send_pong(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_pong(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_text(struct CWebsocketServer *server, const char *message);
+
+void webserver_websocket_send_text(struct CWebsocketServer *server,
+ uint64_t id,
+ const char *message);
+
+void webserver_websocket_send_binary(struct CWebsocketServer *server,
+ uint64_t id,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_broadcast_binary(struct CWebsocketServer *server,
+ const uint8_t *data,
+ uintptr_t data_size);
+
+void webserver_websocket_set_status_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(enum CServerStatus, void*));
+
+void webserver_websocket_clear_status_callback(struct CWebsocketServer *server);
+
+void webserver_websocket_message_release(struct CWebsocketMessage *message);
+
+enum WebsocketMessageType webserver_websocket_message_type(struct CWebsocketMessage *message);
+
+const uint8_t *webserver_websocket_message_data(struct CWebsocketMessage *message);
+
+uintptr_t webserver_websocket_message_data_size(struct CWebsocketMessage *message);
+
+struct CWebsocketMessage *webserver_websocket_message_create_text(const char *text);
+
+struct CWebsocketMessage *webserver_websocket_message_create_ping(const uint8_t *data,
+ uintptr_t data_size);
+
+struct CWebsocketMessage *webserver_websocket_message_create_pong(const uint8_t *data,
+ uintptr_t data_size);
+
+struct CWebsocketMessage *webserver_websocket_message_create_binary(const uint8_t *data,
+ uintptr_t data_size);
+
+char *webserver_websocket_message_text(const struct CWebsocketMessage *message);
+
+uint16_t webserver_websocket_reason_code(const struct CWebsocketReason *reason);
+
+char *webserver_websocket_reason_description(const struct CWebsocketReason *reason);
+
+void webserver_websocket_reason_release(struct CWebsocketReason *reason);
+
+uint64_t webserver_websocket_add_connect_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t, void*));
+
+void webserver_websocket_remove_connect_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_disconnect_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t,
+ struct CWebsocketReason*,
+ void*));
+
+void webserver_websocket_remove_disconnect_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_message_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t,
+ struct CWebsocketMessage*,
+ void*));
+
+void webserver_websocket_remove_message_callback(struct CWebsocketServer *server, uint64_t id);
+
+uint64_t webserver_websocket_add_error_callback(struct CWebsocketServer *server,
+ void *data,
+ void (*callback)(uint64_t, char*, void*));
+
+void webserver_websocket_remove_error_callback(struct CWebsocketServer *server, uint64_t id);
+
+#endif /* WEBSERVER_C_H */
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/WebServerNativeTests/WebServerNativeTests.swift b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNativeTests/WebServerNativeTests.swift
new file mode 100644
index 00000000..0b329660
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/WebServerNativeTests/WebServerNativeTests.swift
@@ -0,0 +1,36 @@
+//
+// WebServerNativeTests.swift
+// WebServerNativeTests
+//
+// Created by Osei Fortune on 20/10/2024.
+//
+
+import XCTest
+@testable import WebServerNative
+
+class WebServerNativeTests: XCTestCase {
+
+ override func setUpWithError() throws {
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ }
+
+ override func tearDownWithError() throws {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ }
+
+ func testExample() throws {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ // Any test you write for XCTest can be annotated as throws and async.
+ // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
+ // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
+ }
+
+ func testPerformanceExample() throws {
+ // This is an example of a performance test case.
+ self.measure {
+ // Put the code you want to measure the time of here.
+ }
+ }
+
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/build.sh b/packages/nativescript-web-server/src-native/web-server-ios/build.sh
new file mode 100755
index 00000000..8effb403
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/build.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+echo "Set exit on simple errors"
+set -e
+
+rm -rf $(PWD)/dist
+
+echo "Build for iphonesimulator"
+xcodebuild \
+ -project WebServerNative.xcodeproj \
+ -scheme WebServerNative \
+ -sdk iphonesimulator \
+ -destination "generic/platform=iOS Simulator" \
+ -configuration Release \
+ clean build \
+ BUILD_DIR=$(PWD)/dist \
+ SKIP_INSTALL=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ -quiet
+
+echo "Build for iphoneos"
+xcodebuild \
+ -project WebServerNative.xcodeproj \
+ -scheme WebServerNative \
+ -sdk iphoneos \
+ -destination "generic/platform=iOS" \
+ -configuration Release \
+ clean build \
+ BUILD_DIR=$(PWD)/dist \
+ CODE_SIGN_IDENTITY="" \
+ CODE_SIGNING_REQUIRED=NO \
+ SKIP_INSTALL=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ -quiet
+
+echo "Creating XCFramework"
+xcodebuild \
+ -create-xcframework \
+ -framework $(PWD)/dist/Release-iphoneos/WebServerNative.framework \
+ -debug-symbols $(PWD)/dist/Release-iphoneos/WebServerNative.framework.dSYM \
+ -framework $(PWD)/dist/Release-iphonesimulator/WebServerNative.framework \
+ -debug-symbols $(PWD)/dist/Release-iphonesimulator/WebServerNative.framework.dSYM \
+ -output $(PWD)/dist/WebServerNative.xcframework
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-ios/pre-build.sh b/packages/nativescript-web-server/src-native/web-server-ios/pre-build.sh
new file mode 100755
index 00000000..fde9a2df
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-ios/pre-build.sh
@@ -0,0 +1,91 @@
+#!/usr/bin/env bash
+set -e
+
+source $HOME/.cargo/env
+source $HOME/.profile
+
+whereis cc
+
+function to_bool() {
+ local arg="$1"
+ case "$(echo "$arg" | tr '[:upper:]' '[:lower:]')" in
+ [0-9]+)
+ if [ $arg -eq 0 ]; then
+ echo false
+ else
+ echo true
+ fi
+ ;;
+ n | no | f | false) echo false ;;
+ y | yes | t | true) echo true ;;
+ *)
+ if [ -n "$arg" ]; then
+ echo "warning: invalid boolean argument ('$arg'). Expected true or false" >&2
+ fi
+ echo false
+ ;;
+ esac
+}
+
+
+
+CWD="$SRCROOT/../web-server-native/crates/"
+pushd "$SRCROOT/../web-server-native/"
+
+IS_SIMULATOR=false
+
+IS_RELEASE=false
+RUST_BUILD_TYPE=""
+RUST_BUILD_TARGET=""
+
+if [[ $CONFIGURATION == Release ]]; then
+ IS_RELEASE=true
+fi
+
+
+
+if $IS_RELEASE; then
+ RUST_BUILD_TYPE="--release"
+fi
+
+
+
+PLATFORM_NAME="${PLATFORM_NAME:-iphoneos}"
+CURRENT_ARCH="${CURRENT_ARCH}"
+
+if [ -z "$CURRENT_ARCH" ] || [ "$CURRENT_ARCH" == "undefined_arch" ]; then
+ # Xcode 10 beta sets CURRENT_ARCH to "undefined_arch", this leads to incorrect linker arg.
+ # it's better to rely on platform name as fallback because architecture differs between simulator and device
+
+ if [[ "$PLATFORM_NAME" == *"simulator"* ]]; then
+ CURRENT_ARCH="arm64"
+ IS_SIMULATOR=true
+ else
+ CURRENT_ARCH="arm64"
+ fi
+fi
+
+
+if [[ $CURRENT_ARCH == x86_64 ]]; then
+ RUST_BUILD_TARGET="x86_64-apple-ios"
+fi
+
+
+if [[ $CURRENT_ARCH == arm64 ]]; then
+ if [[ $IS_SIMULATOR == false ]]; then
+ RUST_BUILD_TARGET="aarch64-apple-ios"
+ else
+ RUST_BUILD_TARGET="aarch64-apple-ios-sim"
+ fi
+fi
+
+export RUSTFLAGS="-Zlocation-detail=none -C panic=abort -C link-arg=-undefined -C link-arg=dynamic_lookup"
+export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src"
+export DYLD_LIBRARY_PATH="$(rustc --print sysroot)/lib:$DYLD_LIBRARY_PATH:$DYLD_FALLBACK_LIBRARY_PATH"
+export RUST_BUILD_TARGET="$RUST_BUILD_TARGET"
+
+cbindgen --config "$CWD/server-ios/cbindgen.toml" "$CWD/server-ios/src/lib.rs" -l c >"$SRCROOT/WebServerNative/include/web_server_native.h"
+
+cargo +nightly build -Z build-std='std,panic_abort' -Z build-std-features=panic_immediate_abort --manifest-path Cargo.toml --target $RUST_BUILD_TARGET $RUST_BUILD_TYPE -p server-ios
+
+popd
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/.idea/.gitignore b/packages/nativescript-web-server/src-native/web-server-native/.idea/.gitignore
new file mode 100644
index 00000000..13566b81
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/packages/nativescript-web-server/src-native/web-server-native/.idea/modules.xml b/packages/nativescript-web-server/src-native/web-server-native/.idea/modules.xml
new file mode 100644
index 00000000..3344fcfb
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/.idea/vcs.xml b/packages/nativescript-web-server/src-native/web-server-native/.idea/vcs.xml
new file mode 100644
index 00000000..4fce1d86
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/.idea/web-server-native.iml b/packages/nativescript-web-server/src-native/web-server-native/.idea/web-server-native.iml
new file mode 100644
index 00000000..ce9c8bd2
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/.idea/web-server-native.iml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/Cargo.lock b/packages/nativescript-web-server/src-native/web-server-native/Cargo.lock
new file mode 100644
index 00000000..d5d56708
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/Cargo.lock
@@ -0,0 +1,1621 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "actix-codec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a"
+dependencies = [
+ "bitflags",
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "actix-cors"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9e772b3bcafe335042b5db010ab7c09013dad6eac4915c91d8d50902769f331"
+dependencies = [
+ "actix-utils",
+ "actix-web",
+ "derive_more",
+ "futures-util",
+ "log",
+ "once_cell",
+ "smallvec",
+]
+
+[[package]]
+name = "actix-files"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0773d59061dedb49a8aed04c67291b9d8cf2fe0b60130a381aab53c6dd86e9be"
+dependencies = [
+ "actix-http",
+ "actix-service",
+ "actix-utils",
+ "actix-web",
+ "bitflags",
+ "bytes",
+ "derive_more",
+ "futures-core",
+ "http-range",
+ "log",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project-lite",
+ "v_htmlescape",
+]
+
+[[package]]
+name = "actix-http"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4"
+dependencies = [
+ "actix-codec",
+ "actix-rt",
+ "actix-service",
+ "actix-utils",
+ "ahash",
+ "base64",
+ "bitflags",
+ "brotli",
+ "bytes",
+ "bytestring",
+ "derive_more",
+ "encoding_rs",
+ "flate2",
+ "futures-core",
+ "h2",
+ "http",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "language-tags",
+ "local-channel",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rand",
+ "sha1",
+ "smallvec",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "zstd",
+]
+
+[[package]]
+name = "actix-macros"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "actix-router"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8"
+dependencies = [
+ "bytestring",
+ "cfg-if",
+ "http",
+ "regex",
+ "regex-lite",
+ "serde",
+ "tracing",
+]
+
+[[package]]
+name = "actix-rt"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208"
+dependencies = [
+ "futures-core",
+ "tokio",
+]
+
+[[package]]
+name = "actix-server"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894"
+dependencies = [
+ "actix-rt",
+ "actix-service",
+ "actix-utils",
+ "futures-core",
+ "futures-util",
+ "mio",
+ "socket2",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "actix-service"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
+dependencies = [
+ "futures-core",
+ "paste",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "actix-utils"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8"
+dependencies = [
+ "local-waker",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "actix-web"
+version = "4.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38"
+dependencies = [
+ "actix-codec",
+ "actix-http",
+ "actix-macros",
+ "actix-router",
+ "actix-rt",
+ "actix-server",
+ "actix-service",
+ "actix-utils",
+ "actix-web-codegen",
+ "ahash",
+ "bytes",
+ "bytestring",
+ "cfg-if",
+ "cookie",
+ "derive_more",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "impl-more",
+ "itoa",
+ "language-tags",
+ "log",
+ "mime",
+ "once_cell",
+ "pin-project-lite",
+ "regex",
+ "regex-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "smallvec",
+ "socket2",
+ "time",
+ "url",
+]
+
+[[package]]
+name = "actix-web-codegen"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8"
+dependencies = [
+ "actix-router",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "actix-ws"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3a1fb4f9f2794b0aadaf2ba5f14a6f034c7e86957b458c506a8cb75953f2d99"
+dependencies = [
+ "actix-codec",
+ "actix-http",
+ "actix-web",
+ "bytestring",
+ "futures-core",
+ "tokio",
+]
+
+[[package]]
+name = "addr2line"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler2"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "backtrace"
+version = "0.3.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
+dependencies = [
+ "addr2line",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
+name = "bitflags"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "brotli"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3"
+
+[[package]]
+name = "bytestring"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "cc"
+version = "1.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945"
+dependencies = [
+ "jobserver",
+ "libc",
+ "shlex",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "combine"
+version = "4.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "cookie"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
+dependencies = [
+ "percent-encoding",
+ "time",
+ "version_check",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "flate2"
+version = "1.0.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
+
+[[package]]
+name = "futures-task"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
+
+[[package]]
+name = "futures-util"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
+
+[[package]]
+name = "h2"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+
+[[package]]
+name = "http"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-range"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
+
+[[package]]
+name = "httparse"
+version = "1.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "impl-more"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae21c3177a27788957044151cc2800043d127acaa460a47ebb9b84dfa2c6aa0"
+
+[[package]]
+name = "indexmap"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "language-tags"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
+
+[[package]]
+name = "libc"
+version = "0.2.161"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
+
+[[package]]
+name = "local-channel"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "local-waker",
+]
+
+[[package]]
+name = "local-waker"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
+dependencies = [
+ "adler2",
+]
+
+[[package]]
+name = "mio"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "object"
+version = "0.36.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-lite"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+
+[[package]]
+name = "serde"
+version = "1.0.210"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.210"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.129"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbcf9b78a125ee667ae19388837dd12294b858d101fdd393cb9d5501ef09eb2"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "server-android"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "jni",
+ "parking_lot",
+ "web-server-native",
+]
+
+[[package]]
+name = "server-ios"
+version = "0.1.0"
+dependencies = [
+ "web-server-native",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "socket2"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+dependencies = [
+ "deranged",
+ "itoa",
+ "num-conv",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.41.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "url"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "v_htmlescape"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "web-server-native"
+version = "0.1.0"
+dependencies = [
+ "actix-cors",
+ "actix-files",
+ "actix-web",
+ "actix-ws",
+ "bytestring",
+ "futures",
+ "futures-util",
+ "parking_lot",
+ "tokio",
+]
+
+[[package]]
+name = "web-server-playground"
+version = "0.1.0"
+dependencies = [
+ "tokio",
+ "web-server-native",
+]
+
+[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zstd"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "7.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059"
+dependencies = [
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.13+zstd.1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/packages/nativescript-web-server/src-native/web-server-native/Cargo.toml b/packages/nativescript-web-server/src-native/web-server-native/Cargo.toml
new file mode 100644
index 00000000..afbf2e18
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/Cargo.toml
@@ -0,0 +1,18 @@
+[workspace]
+resolver = "2"
+
+members = [
+ "crates/server",
+ "crates/playground",
+ "crates/server-android",
+ "crates/server-ios"
+]
+
+[profile.release]
+panic = "abort"
+codegen-units = 1
+lto = true
+opt-level = 3
+debug = false
+incremental = false
+strip = true
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/playground/Cargo.toml b/packages/nativescript-web-server/src-native/web-server-native/crates/playground/Cargo.toml
new file mode 100644
index 00000000..b6b0f93a
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/playground/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "web-server-playground"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+web-server-native = { path = "../server" }
+tokio = {version = "1.41.1", features = ["full"]}
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/playground/src/main.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/playground/src/main.rs
new file mode 100644
index 00000000..502049c3
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/playground/src/main.rs
@@ -0,0 +1,98 @@
+use tokio::time::{self, Duration};
+use web_server_native::static_server::StaticServiceOptions;
+use web_server_native::websocket_server::{Message, Reason, Server, WebSocketServiceOptions};
+struct ServerCallback {
+ wss: Option,
+}
+impl web_server_native::static_server::Callback for ServerCallback {
+ fn on_success(&self) {
+ println!("Server started successfully!");
+ }
+
+ fn on_error(&self, error: String) {
+ println!("Error: {}", error);
+ }
+}
+
+
+impl web_server_native::websocket_server::WebSocketConnectCallback for ServerCallback {
+ fn on_connect(&self, client_id: u64) {
+ if let Some(wss) = self.wss.as_ref() {
+ let message = Message::new_text(format!("Hi {:?}", client_id));
+ wss.send(message, client_id);
+ }
+ println!("WSS:OnConnect {}", client_id);
+ }
+}
+
+impl web_server_native::websocket_server::WebSocketDisconnectCallback for ServerCallback {
+ fn on_disconnect(&self, client_id: u64, reason: Reason) {
+ println!("WSS:OnDisconnect {} {reason:?}", client_id);
+ }
+}
+
+impl web_server_native::websocket_server::WebSocketMessageCallback for ServerCallback {
+ fn on_message(&self, client_id: u64, message: Message) {
+ println!("{:?} {:?}", client_id, message)
+ }
+}
+
+async fn interval(server: Server) {
+ loop {
+ for client in server.clients() {
+ let message = Message::new_binary([1_u8, 2, 3, 4, 5].as_slice());
+ server.send(message, client.id());
+
+ let message = Message::new_text(format!("Hi {}", client.id()));
+ server.send(message, client.id());
+ }
+ let message = Message::new_text("Hi");
+ server.broadcast(message);
+ time::sleep(Duration::from_secs(1)).await
+ }
+}
+
+fn main() {
+ let (tx, rx) = std::sync::mpsc::channel::<()>();
+ let mut server = web_server_native::static_server::Server::new(
+ StaticServiceOptions {
+ logger: false,
+ path: "/".into(),
+ directory: "./crates/server/files".into(),
+ index: None,
+ host_name: None,
+ port: None,
+ workers: 3,
+ show_files: false,
+ }
+ );
+
+ server.start(Box::new(ServerCallback { wss: None }));
+
+ let wss = Server::new(
+ WebSocketServiceOptions {
+ logger: false,
+ path: "/ws".into(),
+ host_name: None,
+ port: None,
+ workers: 3,
+ auto_pong: true,
+ max_payload: None,
+ }
+ );
+
+ let wss_clone = wss.clone();
+
+ let cb = ServerCallback {
+ wss: Some(wss.clone())
+ };
+ wss.add_on_message(Box::new(cb));
+ wss.add_on_connect(Box::new(ServerCallback { wss: Some(wss.clone()) }));
+ wss.add_on_disconnect(Box::new(ServerCallback { wss: Some(wss.clone()) }));
+ wss.start(Box::new(ServerCallback { wss: Some(wss.clone()) }));
+ let tokio_runtime = web_server_native::tokio_runtime();
+ tokio_runtime.block_on(async move {
+ interval(wss_clone).await;
+ });
+ rx.recv().unwrap();
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/Cargo.toml b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/Cargo.toml
new file mode 100644
index 00000000..67541c56
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "server-android"
+version = "0.1.0"
+edition = "2021"
+[lib]
+crate-type = ["cdylib"]
+name = "webservernative"
+
+[dependencies]
+web-server-native = { path = "../server" }
+jni = "0.21.1"
+bytes = "1.7.2"
+parking_lot = "0.12.3"
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/lib.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/lib.rs
new file mode 100644
index 00000000..f18b9e8d
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/lib.rs
@@ -0,0 +1,112 @@
+use jni::objects::{GlobalRef, JClass, JStaticMethodID, JValue};
+use jni::signature::{Primitive, ReturnType};
+use jni::sys::{jint, jlong};
+use jni::{JNIEnv, JavaVM};
+use parking_lot::RwLock;
+use std::collections::HashMap;
+use std::os::raw::c_void;
+use std::sync::OnceLock;
+use web_server_native::release_bytes;
+
+
+pub mod static_server;
+pub mod websocket_server;
+
+pub(crate) const GC_CLASS: &str = "io/nstudio/plugins/webserver/GC";
+pub(crate) const GC_STATIC_WATCH_OBJECT_METHOD: &str = "io_nstudio_plugins_webserver_GC_watchObject";
+
+pub(crate) const JAVA_VOID_TYPE: ReturnType = ReturnType::Primitive(Primitive::Void);
+
+pub static JVM: OnceLock = OnceLock::new();
+
+
+#[derive(Clone)]
+pub struct StaticMethodCacheItem {
+ clazz: GlobalRef,
+ id: JStaticMethodID,
+}
+
+impl StaticMethodCacheItem {
+ pub fn new(clazz: GlobalRef, id: JStaticMethodID) -> Self {
+ Self {
+ clazz,
+ id,
+ }
+ }
+
+ pub fn clazz(&self) -> JClass {
+ unsafe { JClass::from_raw(self.clazz.as_raw()) }
+ }
+}
+
+pub static JVM_STATIC_METHOD_CACHE: OnceLock>> =
+ OnceLock::new();
+
+pub static JVM_CLASS_CACHE: OnceLock>> =
+ OnceLock::new();
+
+pub fn find_static_method_id(name: &str) -> Option {
+ JVM_STATIC_METHOD_CACHE.get().map_or(None, |c| {
+ c.read()
+ .get(name)
+ .map(|c| c.clone())
+ })
+}
+
+#[no_mangle]
+pub extern "system" fn JNI_OnLoad(vm: JavaVM, _reserved: *const c_void) -> jint {
+ if let Ok(mut env) = vm.get_env() {
+ let gc_clazz = env.find_class(GC_CLASS).unwrap();
+
+ let gc_clazz = env.new_global_ref(gc_clazz).unwrap();
+
+ let watch_item_method = env.get_static_method_id(
+ GC_CLASS, "watchObject", "(JLjava/nio/ByteBuffer;)V",
+ ).unwrap();
+
+
+ let watch_item_method = StaticMethodCacheItem::new(gc_clazz.clone(), watch_item_method);
+
+
+ JVM_CLASS_CACHE.get_or_init(|| {
+ let mut map = HashMap::new();
+ map.insert(GC_CLASS, gc_clazz);
+ RwLock::new(map)
+ });
+
+
+ JVM_STATIC_METHOD_CACHE.get_or_init(|| {
+ let mut map = HashMap::new();
+ map.insert(GC_STATIC_WATCH_OBJECT_METHOD, watch_item_method);
+ RwLock::new(map)
+ });
+
+ JVM.get_or_init(|| vm);
+
+
+ web_server_native::add_on_start(|| {
+ if let Some(jvm) = JVM.get() {
+ let _ = jvm.attach_current_thread();
+ }
+ });
+ }
+ jni::sys::JNI_VERSION_1_6
+}
+pub unsafe fn watch_item(env: &mut JNIEnv, id: jlong, buffer: JValue) {
+ let method_id = find_static_method_id(GC_STATIC_WATCH_OBJECT_METHOD).unwrap();
+ env.call_static_method_unchecked(
+ method_id.clazz(), method_id.id, JAVA_VOID_TYPE, &[JValue::Long(id).as_jni(), buffer.as_jni()],
+ ).unwrap();
+}
+
+
+#[no_mangle]
+pub extern "system" fn Java_io_nstudio_plugins_webserver_GC_disposeByteBufMut(
+ _env: JNIEnv,
+ _: JClass,
+ buf: jlong,
+) {
+ if buf != 0 {
+ release_bytes(buf);
+ }
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/static_server.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/static_server.rs
new file mode 100644
index 00000000..c515f500
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/static_server.rs
@@ -0,0 +1,305 @@
+use crate::watch_item;
+use jni::objects::{GlobalRef, JClass, JObject, JString, JValue, JValueGen};
+use jni::sys::{jboolean, jint, jlong, jshort, JNI_TRUE};
+use jni::JNIEnv;
+use std::fmt::Debug;
+use web_server_native::static_server::{Callback, Server, ServerStatus, StaticServiceOptions, StatusCallback};
+use web_server_native::websocket_server::{Message, Reason, WebSocketConnectCallback, WebSocketDisconnectCallback, WebSocketErrorCallback, WebSocketMessageCallback};
+
+#[no_mangle]
+pub extern "system" fn Java_io_nstudio_plugins_webserver_Server_init(
+ mut env: JNIEnv,
+ _: JClass,
+ logger: jboolean,
+ path: JString,
+ directory: JString,
+ index: JString,
+ host_name: JString,
+ port: jshort,
+ workers: jint,
+ show_files: jboolean,
+) -> jlong {
+ let path = env.get_string(&path).unwrap().to_string_lossy().to_string();
+ let directory = env.get_string(&directory).unwrap().to_string_lossy().to_string();
+ let index = if index.is_null() {
+ None
+ } else {
+ Some(env.get_string(&index).unwrap().to_string_lossy().to_string())
+ };
+
+
+ let host_name = if host_name.is_null() {
+ None
+ } else {
+ Some(env.get_string(&host_name).unwrap().to_string_lossy().to_string())
+ };
+
+ let port: Option = port.try_into().ok();
+
+ let workers: u32 = workers.try_into().unwrap_or(2);
+
+
+ let options = StaticServiceOptions {
+ logger: logger == JNI_TRUE,
+ path,
+ directory,
+ index,
+ host_name,
+ port,
+ workers,
+ show_files: show_files == JNI_TRUE,
+ };
+
+ Box::into_raw(
+ Box::new(
+ Server::new(
+ options
+ )
+ )
+ ) as jlong
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_Server_release(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) {
+ if server != 0 {
+ let _ = Box::from_raw(server as *mut Server);
+ }
+}
+
+
+#[derive(Debug)]
+pub struct JavaCallback {
+ pub(crate) callback: GlobalRef,
+ pub(crate) jvm: jni::JavaVM,
+}
+
+unsafe impl Send for JavaCallback {}
+
+unsafe impl Sync for JavaCallback {}
+
+impl Callback for JavaCallback {
+ fn on_success(&self) {
+ let vm = self.jvm.attach_current_thread();
+ let mut env = vm.unwrap();
+ let _ = env.call_method(self.callback.as_obj(), "onSuccess", "()V", &[]);
+ }
+
+ fn on_error(&self, error: String) {
+ let vm = self.jvm.attach_current_thread();
+ let mut env = vm.unwrap();
+ let e = env.new_string(error).unwrap();
+ let _ = env.call_method(self.callback.as_obj(), "onError", "(Ljava/lang/String;)V", &[
+ (&e).into()
+ ]);
+ }
+}
+
+impl StatusCallback for JavaCallback {
+ fn on_change(&self, status: ServerStatus) {
+ let vm = self.jvm.attach_current_thread();
+ let mut env = vm.unwrap();
+ let _ = env.call_method(self.callback.as_obj(), "onChange", "(I)V", &[
+ JValueGen::Int(status as i32)
+ ]);
+ }
+}
+
+impl WebSocketConnectCallback for JavaCallback {
+ fn on_connect(&self, client_id: u64) {
+ let vm = self.jvm.attach_current_thread();
+ let mut env = vm.unwrap();
+ let _ = env.call_method(self.callback.as_obj(), "onConnect", "(J)V", &[(client_id as jlong).into()]);
+ }
+}
+
+impl WebSocketDisconnectCallback for JavaCallback {
+ fn on_disconnect(&self, client_id: u64, reason: Reason) {
+ let vm = self.jvm.attach_current_thread();
+ let mut env = vm.unwrap();
+ let null = JObject::null();
+ let (code, description) = match reason {
+ Reason::None => {
+ (1000u16, null)
+ }
+ Reason::Some(reason) => {
+ let description = match reason.description {
+ None => {
+ null
+ }
+ Some(description) => {
+ let desc = env.new_string(description).unwrap();
+ desc.into()
+ }
+ };
+ (reason.code.into(), description)
+ }
+ };
+
+ let description: JValue = JValueGen::Object(&description);
+ let _ = env.call_method(self.callback.as_obj(), "onDisconnect", "(JSLjava/lang/String;)V", &[(client_id as jlong).into(), (code as jshort).into(), description]);
+ }
+}
+
+impl WebSocketMessageCallback for JavaCallback {
+ fn on_message(&self, client_id: u64, message: Message) {
+ let vm = self.jvm.attach_current_thread();
+ if let Ok(mut env) = vm {
+ match message {
+ Message::Text(text) => {
+ let text = env.new_string(text).unwrap();
+ let text: JValue = JValueGen::Object(&text);
+ let _ = env.call_method(self.callback.as_obj(), "onMessage", "(JLjava/lang/String;)V", &[(client_id as jlong).into(), text.into()]);
+ }
+ Message::Binary(binary) => {
+ match unsafe { env.new_direct_byte_buffer(binary.as_ptr() as _, binary.len()) } {
+ Ok(buf) => {
+ let id = Box::into_raw(Box::new(binary));
+ let buf: JValue = JValueGen::Object(&buf);
+ unsafe { watch_item(&mut env, id as _, buf); }
+ let _ = env.call_method(self.callback.as_obj(), "onMessage", "(JLjava/nio/ByteBuffer;)V", &[(client_id as jlong).into(), buf.into()]);
+ }
+ Err(_) => {}
+ }
+ }
+ Message::Pong(pong) => {
+ match pong {
+ None => {
+ let null = JObject::null();
+ let null = JValueGen::Object(&null);
+ let _ = env.call_method(self.callback.as_obj(), "onPong", "(JLjava/nio/ByteBuffer;)V", &[(client_id as jlong).into(), null]);
+ }
+ Some(pong) => {
+ match unsafe { env.new_direct_byte_buffer(pong.as_ptr() as _, pong.len()) } {
+ Ok(buf) => {
+ let id = Box::into_raw(Box::new(pong));
+ let buf: JValue = JValueGen::Object(&buf);
+ unsafe { watch_item(&mut env, id as _, buf); }
+ let _ = env.call_method(self.callback.as_obj(), "onPong", "(JLjava/nio/ByteBuffer;)V", &[(client_id as jlong).into(), buf]);
+ }
+ Err(_) => {}
+ }
+ }
+ }
+ }
+ Message::Ping(ping) => {
+ match ping {
+ None => {
+ let null = JObject::null();
+ let null = JValueGen::Object(&null);
+ let _ = env.call_method(self.callback.as_obj(), "onPing", "(JLjava/nio/ByteBuffer;)V", &[(client_id as jlong).into(), null]);
+ }
+ Some(ping) => {
+ match unsafe { env.new_direct_byte_buffer(ping.as_ptr() as _, ping.len()) } {
+ Ok(buf) => {
+ let id = Box::into_raw(Box::new(ping));
+ let buf: JValue = JValueGen::Object(&buf);
+ unsafe { watch_item(&mut env, id as _, buf); }
+ let _ = env.call_method(self.callback.as_obj(), "onPing", "(JLjava/nio/ByteBuffer;)V", &[(client_id as jlong).into(), buf.into()]);
+ }
+ Err(_) => {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+impl WebSocketErrorCallback for JavaCallback {
+ fn on_error(&self, client_id: u64, error: String) {
+ let vm = self.jvm.attach_current_thread();
+ if let Ok(mut env) = vm {
+ let error = env.new_string(error).unwrap();
+ let error: JValue = JValueGen::Object(&error);
+ let _ = env.call_method(self.callback.as_obj(), "onError", "(JLjava/lang/String;)V", &[(client_id as jlong).into(), error.into()]);
+ }
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_Server_start(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.start(Box::new(cb));
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_Server_stop(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ wait: jboolean,
+ callback: JObject,
+) {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.stop(wait == JNI_TRUE, Box::new(cb));
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_Server_setStatusCallback(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.set_status_callback(Box::new(cb));
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_Server_clearStatusCallback(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) {
+ let server = &*(server as *mut Server);
+
+ server.clear_status_callback();
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_Server_status(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) -> jint {
+ if server == 0 {
+ return 0;
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.status() as jint
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/websocket_server.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/websocket_server.rs
new file mode 100644
index 00000000..3a7711d4
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-android/src/websocket_server.rs
@@ -0,0 +1,790 @@
+use crate::static_server::JavaCallback;
+use bytes::Bytes;
+use jni::objects::{JByteArray, JByteBuffer, JClass, JObject, JString, ReleaseMode};
+use jni::sys::{jboolean, jint, jlong, jshort, JNI_FALSE, JNI_TRUE};
+use jni::JNIEnv;
+use std::fmt::Debug;
+use std::slice;
+use web_server_native::websocket_server::{Message, Server, WebSocketServiceOptions};
+
+#[no_mangle]
+pub extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_init(
+ mut env: JNIEnv,
+ _: JClass,
+ logger: jboolean,
+ path: JString,
+ max_payload: jint,
+ host_name: JString,
+ port: jshort,
+ workers: jint,
+ auto_pong: jboolean,
+) -> jlong {
+ let path = env.get_string(&path).unwrap().to_string_lossy().to_string();
+
+
+ let host_name = if host_name.is_null() {
+ None
+ } else {
+ Some(env.get_string(&host_name).unwrap().to_string_lossy().to_string())
+ };
+
+ let port: Option = port.try_into().ok();
+
+ let workers: u32 = workers.try_into().unwrap_or(2);
+
+
+ let options = WebSocketServiceOptions {
+ logger: logger == JNI_TRUE,
+ path,
+ host_name,
+ port,
+ workers,
+ auto_pong: auto_pong == JNI_TRUE,
+ max_payload: max_payload.try_into().ok(),
+ };
+
+ Box::into_raw(
+ Box::new(
+ Server::new(
+ options
+ )
+ )
+ ) as jlong
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_release(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) {
+ if server != 0 {
+ let _ = Box::from_raw(server as *mut Server);
+ }
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_start(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.start(Box::new(cb));
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_stop(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ wait: jboolean,
+ callback: JObject,
+) {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.stop(wait == JNI_TRUE, Box::new(cb));
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_setStatusCallback(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.set_status_callback(Box::new(cb));
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_clearStatusCallback(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) {
+ let server = &*(server as *mut Server);
+
+ server.clear_status_callback();
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_status(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) -> jint {
+ if server == 0 {
+ return 0;
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.status() as jint
+}
+
+unsafe fn buffer_to_vec(env: &mut JNIEnv,
+ data: &JByteBuffer) -> Option> {
+ if let (Ok(addr), Ok(size)) = (env.get_direct_buffer_address(data), env.get_direct_buffer_capacity(data)) {
+ let message = slice::from_raw_parts_mut(addr, size).to_vec();
+ return Some(message);
+ }
+ None
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendPingBytes(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+ data: &JByteArray,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = if data.is_null() {
+ None
+ } else {
+ unsafe {
+ let mut message: Option = None;
+
+ if let Ok(array) = env.get_array_elements_critical(data, ReleaseMode::NoCopyBack) {
+ message = Some(bytes::Bytes::from(slice::from_raw_parts_mut(array.as_ptr() as *mut u8, array.len()).to_vec()));
+ }
+
+ if message.is_none() {
+ let length = env.get_array_length(data).unwrap_or_default();
+ let mut buffer: Vec = Vec::with_capacity(length as usize);
+ let slice = slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut i8, buffer.len());
+ let _ = env.get_byte_array_region(data, 0, slice);
+ message = Some(Bytes::from(buffer));
+ }
+
+ message
+ }
+ };
+ let message = Message::Ping(message);
+ server.send(message, id as u64);
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendPingEmpty(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = Message::Ping(None);
+ server.send(message, id as u64);
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastPingEmpty(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = Message::Ping(None);
+ server.broadcast(message);
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastPingBytes(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ data: &JByteArray,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = if data.is_null() {
+ None
+ } else {
+ unsafe {
+ let mut message: Option> = None;
+
+ if let Ok(array) = env.get_array_elements_critical(data, ReleaseMode::NoCopyBack) {
+ message = Some(slice::from_raw_parts_mut(array.as_ptr() as *mut u8, array.len()).to_vec())
+ }
+
+ if message.is_none() {
+ let length = env.get_array_length(data).unwrap_or_default();
+ let mut buffer: Vec = Vec::with_capacity(length as usize);
+ let slice = slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut i8, buffer.len());
+ let _ = env.get_byte_array_region(data, 0, slice);
+ message = Some(buffer)
+ }
+
+ message.map(|bytes| { bytes::Bytes::from(bytes) })
+ }
+ };
+ let message = Message::Ping(message);
+ server.broadcast(message);
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendPingBuffer(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+ data: &JByteBuffer,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+ if let Some(message) = buffer_to_vec(&mut env, data) {
+ let message = Message::Ping(Some(Bytes::from(message)));
+ server.send(message, id as u64);
+ }
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastPingBuffer(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ data: &JByteBuffer,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+ if let Some(message) = buffer_to_vec(&mut env, data) {
+ let message = Message::Ping(Some(Bytes::from(message)));
+ server.broadcast(message);
+ }
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendPongEmpty(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = Message::Pong(None);
+ server.send(message, id as u64);
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendPongBytes(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+ data: &JByteArray,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = if data.is_null() {
+ None
+ } else {
+ unsafe {
+ let mut message: Option> = None;
+
+ if let Ok(array) = env.get_array_elements_critical(data, ReleaseMode::NoCopyBack) {
+ message = Some(slice::from_raw_parts_mut(array.as_ptr() as *mut u8, array.len()).to_vec())
+ }
+
+ if message.is_none() {
+ let length = env.get_array_length(data).unwrap_or_default();
+ let mut buffer: Vec = Vec::with_capacity(length as usize);
+ let slice = slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut i8, buffer.len());
+ let _ = env.get_byte_array_region(data, 0, slice);
+ message = Some(buffer)
+ }
+
+ message.map(|bytes| { bytes::Bytes::from(bytes) })
+ }
+ };
+ let message = Message::Pong(message);
+ server.send(message, id as u64);
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastPongEmpty(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = Message::Pong(None);
+ server.broadcast(message);
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastPongBytes(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ data: &JByteArray,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = if data.is_null() {
+ None
+ } else {
+ unsafe {
+ let mut message: Option> = None;
+
+ if let Ok(array) = env.get_array_elements_critical(data, ReleaseMode::NoCopyBack) {
+ message = Some(slice::from_raw_parts_mut(array.as_ptr() as *mut u8, array.len()).to_vec())
+ }
+
+ if message.is_none() {
+ let length = env.get_array_length(data).unwrap_or_default();
+ let mut buffer: Vec = Vec::with_capacity(length as usize);
+ let slice = slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut i8, buffer.len());
+ let _ = env.get_byte_array_region(data, 0, slice);
+ message = Some(buffer)
+ }
+
+ message.map(|bytes| { bytes::Bytes::from(bytes) })
+ }
+ };
+ let message = Message::Pong(message);
+ server.broadcast(message);
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendPongBuffer(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+ data: &JByteBuffer,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+ if let Some(message) = buffer_to_vec(&mut env, data) {
+ let message = bytes::Bytes::from(message);
+ let message = Message::Pong(message.into());
+ server.send(message, id as u64);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastPongBuffer(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ data: &JByteBuffer,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+ if let Some(message) = buffer_to_vec(&mut env, data) {
+ let message = Message::Pong(Some(bytes::Bytes::from(message)));
+ server.broadcast(message);
+ }
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendText(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+ text: JString,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = if text.is_null() {
+ "".to_string()
+ } else {
+ if let Ok(text) = env.get_string(&text) {
+ text.to_string_lossy().to_string()
+ } else {
+ "".to_string()
+ }
+ };
+ let message = Message::Text(message.into());
+ server.send(message, id as u64);
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastText(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ text: JString,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ let message = if text.is_null() {
+ "".to_string()
+ } else {
+ if let Ok(text) = env.get_string(&text) {
+ text.to_string_lossy().to_string()
+ } else {
+ "".to_string()
+ }
+ };
+ let message = Message::Text(message.into());
+ server.broadcast(message);
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendBinaryBytes(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+ data: &JByteArray,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+ if data.is_null() {
+ // todo
+ return;
+ }
+
+ let mut message: Option> = None;
+
+ if let Ok(array) = env.get_array_elements_critical(data, ReleaseMode::NoCopyBack) {
+ message = Some(slice::from_raw_parts_mut(array.as_ptr() as *mut u8, array.len()).to_vec());
+ }
+
+ if message.is_none() {
+ let length = env.get_array_length(data).unwrap_or_default();
+ let mut buffer: Vec = Vec::with_capacity(length as usize);
+ let slice = slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut i8, buffer.len());
+ let _ = env.get_byte_array_region(data, 0, slice);
+ message = Some(buffer);
+ }
+
+
+ if let Some(message) = message {
+ let message = Message::Binary(message.into());
+ server.send(message, id as u64);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastBinaryBytes(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ data: &JByteArray,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+
+ if data.is_null() {
+ // todo
+ return;
+ }
+
+ let mut message: Option> = None;
+
+
+ if let Ok(array) = env.get_array_elements_critical(data, ReleaseMode::NoCopyBack) {
+ let buf = slice::from_raw_parts(array.as_ptr() as *mut u8, array.len()).to_vec();
+ message = Some(buf);
+ }
+
+ if message.is_none() {
+ let length = env.get_array_length(data).unwrap_or_default();
+ let mut buffer: Vec = Vec::with_capacity(length as usize);
+ let slice = slice::from_raw_parts_mut(buffer.as_mut_ptr() as *mut i8, buffer.len());
+ let _ = env.get_byte_array_region(data, 0, slice);
+ message = Some(buffer);
+ }
+
+ if let Some(message) = message {
+ let message = Message::Binary(message.into());
+ server.broadcast(message);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_sendBinaryBuffer(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+ data: &JByteBuffer,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+ if let Some(message) = buffer_to_vec(&mut env, data) {
+ let message = Message::Binary(message.into());
+ server.send(message, id as u64);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_broadcastBinaryBuffer(
+ mut env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ data: &JByteBuffer,
+) {
+ if server == 0 {
+ return;
+ };
+
+ let server = &*(server as *mut Server);
+ if let Some(message) = buffer_to_vec(&mut env, data) {
+ let message = Message::Binary(message.into());
+ server.broadcast(message);
+ }
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeAddOnConnect(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) -> jlong {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.add_on_connect(Box::new(cb)) as jlong
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeRemoveOnConnect(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+) {
+ if server == 0 {
+ return;
+ }
+
+ let server = &*(server as *mut Server);
+
+ server.remove_on_connect(id as u64)
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeAddOnDisconnect(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) -> jlong {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.add_on_disconnect(Box::new(cb)) as jlong
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeRemoveOnDisconnect(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+) {
+ if server == 0 {
+ return;
+ }
+
+ let server = &*(server as *mut Server);
+
+ server.remove_on_disconnect(id as u64)
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeAddOnMessage(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) -> jlong {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.add_on_message(Box::new(cb)) as jlong
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeRemoveOnMessage(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+) {
+ if server == 0 {
+ return;
+ }
+
+ let server = &*(server as *mut Server);
+
+ server.remove_on_message(id as u64)
+}
+
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeAddOnError(
+ env: JNIEnv,
+ _: JClass,
+ server: jlong,
+ callback: JObject,
+) -> jlong {
+ let jvm = env.get_java_vm().unwrap();
+ let cb = JavaCallback {
+ jvm,
+ callback: env.new_global_ref(callback).unwrap(),
+ };
+
+ let server = &*(server as *mut Server);
+
+ server.add_on_error(Box::new(cb)) as jlong
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_nativeRemoveOnError(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+ id: jlong,
+) {
+ if server == 0 {
+ return;
+ }
+
+ let server = &*(server as *mut Server);
+
+ server.remove_on_error(id as u64)
+}
+
+#[no_mangle]
+pub unsafe extern "system" fn Java_io_nstudio_plugins_webserver_websocket_Server_hasClient(
+ _: JNIEnv,
+ _: JClass,
+ server: jlong,
+ client_id: jlong,
+) -> jboolean {
+ if server == 0 || client_id > 0 {
+ return 0;
+ };
+
+ let server = &*(server as *mut Server);
+
+ if server.client(client_id as u64).is_some() {
+ return JNI_TRUE;
+ }
+ JNI_FALSE
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/Cargo.toml b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/Cargo.toml
new file mode 100644
index 00000000..261b3a6a
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "server-ios"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["staticlib"]
+name = "webservernative"
+
+[dependencies]
+web-server-native = { path = "../server" }
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/cbindgen.toml b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/cbindgen.toml
new file mode 100644
index 00000000..13d85997
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/cbindgen.toml
@@ -0,0 +1,23 @@
+autogen_warning = "/* Warning, this file is autogenerated by cbindgen. Don't modify this manually. */"
+language = "C"
+namespace = "ffi"
+include_guard = "WEBSERVER_C_H"
+
+
+[defines]
+"target_os = ios" = "TARGET_OS_IOS"
+"target_os = macos" = "TARGET_OS_MACOS"
+"target_os = android" = "TARGET_OS_ANDROID"
+
+[enum]
+prefix_with_name = true
+
+[parse]
+parse_deps = true
+include = ["web-server-native"]
+
+[parse.expand]
+crates = ["web-server-native"]
+
+[export]
+include = ["Server", "ServerStatus"]
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/lib.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/lib.rs
new file mode 100644
index 00000000..2e7b647e
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/lib.rs
@@ -0,0 +1,2 @@
+pub mod static_server;
+pub mod websocket_server;
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/static_server.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/static_server.rs
new file mode 100644
index 00000000..ea82452d
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/static_server.rs
@@ -0,0 +1,190 @@
+use std::ffi::{c_char, c_void, CStr, CString};
+use web_server_native::static_server::{Callback, Server, ServerStatus, StaticServiceOptions, StatusCallback};
+
+pub struct CServer {
+ server: Server,
+}
+
+#[repr(C)]
+pub enum CServerStatus {
+ Inactive,
+ Active,
+ Crashed,
+ Starting,
+ Stopping,
+}
+
+impl Into for ServerStatus {
+ fn into(self) -> CServerStatus {
+ match self {
+ ServerStatus::Inactive => CServerStatus::Inactive,
+ ServerStatus::Active => CServerStatus::Active,
+ ServerStatus::Crashed => CServerStatus::Crashed,
+ ServerStatus::Starting => CServerStatus::Starting,
+ ServerStatus::Stopping => CServerStatus::Stopping,
+ }
+ }
+}
+#[repr(C)]
+pub struct CStaticServiceOptions {
+ logger: bool,
+ path: *const c_char,
+ directory: *const c_char,
+ index: *const c_char,
+ host_name: *const c_char,
+ port: i16,
+ workers: u32,
+ show_files: bool,
+}
+
+impl From for StaticServiceOptions {
+ fn from(value: CStaticServiceOptions) -> Self {
+ let path = unsafe { CStr::from_ptr(value.path) }.to_string_lossy();
+ let directory = unsafe { CStr::from_ptr(value.directory) }.to_string_lossy();
+ let index = if value.index.is_null() {
+ None
+ } else {
+ unsafe { Some(CStr::from_ptr(value.index).to_string_lossy().to_string()) }
+ };
+
+ let host_name = if value.host_name.is_null() {
+ None
+ } else {
+ unsafe { Some(CStr::from_ptr(value.host_name).to_string_lossy().to_string()) }
+ };
+
+ let port: Option = value.port.try_into().ok();
+
+ Self {
+ logger: value.logger,
+ path: path.to_string(),
+ directory: directory.to_string(),
+ index,
+ host_name,
+ port,
+ workers: value.workers,
+ show_files: value.show_files,
+ }
+ }
+}
+
+impl From<&CStaticServiceOptions> for StaticServiceOptions {
+ fn from(value: &CStaticServiceOptions) -> Self {
+ let path = unsafe { CStr::from_ptr(value.path) }.to_string_lossy();
+ let directory = unsafe { CStr::from_ptr(value.directory) }.to_string_lossy();
+ let index = if value.index.is_null() {
+ None
+ } else {
+ unsafe { Some(CStr::from_ptr(value.index).to_string_lossy().to_string()) }
+ };
+
+ let host_name = if value.host_name.is_null() {
+ None
+ } else {
+ unsafe { Some(CStr::from_ptr(value.host_name).to_string_lossy().to_string()) }
+ };
+
+ let port: Option = value.port.try_into().ok();
+
+ Self {
+ logger: value.logger,
+ path: path.to_string(),
+ directory: directory.to_string(),
+ index,
+ host_name,
+ port,
+ workers: value.workers,
+ show_files: value.show_files,
+ }
+ }
+}
+
+pub struct CCallback {
+ pub(crate) callback: extern "C" fn(*mut c_char, *mut c_void),
+ pub(crate) data: *mut c_void,
+}
+
+unsafe impl Send for CCallback {}
+
+impl Callback for CCallback {
+ fn on_success(&self) {
+ (self.callback)(std::ptr::null_mut(), self.data);
+ }
+
+ fn on_error(&self, error: String) {
+ (self.callback)(CString::new(error).unwrap().into_raw(), self.data);
+ }
+}
+
+
+#[derive(Debug)]
+pub struct CStatusCallback {
+ pub(crate) callback: extern "C" fn(CServerStatus, *mut c_void),
+ pub(crate) data: *mut c_void,
+}
+
+unsafe impl Send for CStatusCallback {}
+
+unsafe impl Sync for CStatusCallback {}
+
+impl StatusCallback for CStatusCallback {
+ fn on_change(&self, status: ServerStatus) {
+ (self.callback)(status.into(), self.data);
+ }
+}
+
+
+#[no_mangle]
+pub extern "C" fn webserver_init(options: *const CStaticServiceOptions) -> *mut CServer {
+ let service_options = unsafe { &*options };
+ Box::into_raw(
+ Box::new(CServer { server: Server::new(service_options.into()) })
+ )
+}
+
+#[no_mangle]
+pub extern "C" fn webserver_release(server: *mut CServer) {
+ if !server.is_null() {
+ let _ = unsafe { Box::from_raw(server) };
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_start(server: *mut CServer, data: *mut c_void, callback: extern "C" fn(*mut c_char, *mut c_void)) {
+ let server = &*server;
+ server.server.start(Box::new(CCallback {
+ callback,
+ data,
+ }));
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_stop(server: *mut CServer, wait: bool, data: *mut c_void, callback: extern "C" fn(*mut c_char, *mut c_void)) {
+ let server = &*server;
+ server.server.stop(wait, Box::new(CCallback { callback, data }));
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_status(server: *mut CServer) -> CServerStatus {
+ let server = &*server;
+ server.server.status().into()
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_error_release(error: *mut c_char) {
+ if !error.is_null() {
+ let _ = CString::from_raw(error);
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_set_status_callback(server: *mut CServer, data: *mut c_void, callback: extern "C" fn(CServerStatus, *mut c_void)) {
+ let server = &*server;
+ server.server.set_status_callback(Box::new(CStatusCallback { callback, data }));
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_clear_status_callback(server: *mut CServer) {
+ let server = &*server;
+ server.server.clear_status_callback();
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/websocket_server.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/websocket_server.rs
new file mode 100644
index 00000000..e52ef186
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server-ios/src/websocket_server.rs
@@ -0,0 +1,514 @@
+use crate::static_server::{CCallback, CServerStatus, CStatusCallback};
+use std::ffi::{c_char, c_void, CStr, CString};
+use std::slice;
+use web_server_native::static_server::ServerStatus;
+use web_server_native::websocket_server::{Client, Message, Reason, Server, WebSocketConnectCallback, WebSocketDisconnectCallback, WebSocketErrorCallback, WebSocketMessageCallback, WebSocketServiceOptions};
+
+pub struct CWebsocketServer {
+ server: Server,
+}
+
+#[repr(C)]
+pub enum CWebsocketServerStatus {
+ Inactive,
+ Active,
+ Crashed,
+ Starting,
+ Stopping,
+}
+
+impl Into for ServerStatus {
+ fn into(self) -> CWebsocketServerStatus {
+ match self {
+ ServerStatus::Inactive => CWebsocketServerStatus::Inactive,
+ ServerStatus::Active => CWebsocketServerStatus::Active,
+ ServerStatus::Crashed => CWebsocketServerStatus::Crashed,
+ ServerStatus::Starting => CWebsocketServerStatus::Starting,
+ ServerStatus::Stopping => CWebsocketServerStatus::Stopping,
+ }
+ }
+}
+#[repr(C)]
+pub struct CWebSocketServiceOptions {
+ logger: bool,
+ path: *const c_char,
+ max_payload: isize,
+ host_name: *const c_char,
+ port: i16,
+ workers: u32,
+ auto_pong: bool,
+}
+
+impl From for WebSocketServiceOptions {
+ fn from(value: CWebSocketServiceOptions) -> Self {
+ let path = unsafe { CStr::from_ptr(value.path) }.to_string_lossy();
+
+ let host_name = if value.host_name.is_null() {
+ None
+ } else {
+ unsafe { Some(CStr::from_ptr(value.host_name).to_string_lossy().to_string()) }
+ };
+
+ let port: Option = value.port.try_into().ok();
+
+ Self {
+ logger: value.logger,
+ path: path.to_string(),
+ host_name,
+ port,
+ workers: value.workers,
+ auto_pong: value.auto_pong,
+ max_payload: value.max_payload.try_into().ok(),
+ }
+ }
+}
+
+impl From<&CWebSocketServiceOptions> for WebSocketServiceOptions {
+ fn from(value: &CWebSocketServiceOptions) -> Self {
+ let path = unsafe { CStr::from_ptr(value.path) }.to_string_lossy();
+
+ let host_name = if value.host_name.is_null() {
+ None
+ } else {
+ unsafe { Some(CStr::from_ptr(value.host_name).to_string_lossy().to_string()) }
+ };
+
+ let port: Option = value.port.try_into().ok();
+
+ Self {
+ logger: value.logger,
+ path: path.to_string(),
+ host_name,
+ port,
+ workers: value.workers,
+ auto_pong: value.auto_pong,
+ max_payload: value.max_payload.try_into().ok(),
+ }
+ }
+}
+
+struct ConnectCallback {
+ pub(crate) callback: extern "C" fn(u64, *mut c_void),
+ pub(crate) data: *mut c_void,
+}
+
+unsafe impl Send for ConnectCallback {}
+impl WebSocketConnectCallback for ConnectCallback {
+ fn on_connect(&self, client_id: u64) {
+ (self.callback)(client_id, self.data);
+ }
+}
+
+pub struct CWebsocketMessage(Message);
+
+struct MessageCallback {
+ pub(crate) callback: extern "C" fn(u64, *mut CWebsocketMessage, *mut c_void),
+ pub(crate) data: *mut c_void,
+}
+
+unsafe impl Send for MessageCallback {}
+impl WebSocketMessageCallback for MessageCallback {
+ fn on_message(&self, client_id: u64, message: Message) {
+ (self.callback)(client_id, Box::into_raw(Box::new(CWebsocketMessage(message))), self.data);
+ }
+}
+
+pub struct CWebsocketReason(Reason);
+
+struct DisconnectCallback {
+ pub(crate) callback: extern "C" fn(u64, *mut CWebsocketReason, *mut c_void),
+ pub(crate) data: *mut c_void,
+}
+
+unsafe impl Send for DisconnectCallback {}
+impl WebSocketDisconnectCallback for DisconnectCallback {
+ fn on_disconnect(&self, client_id: u64, reason: Reason) {
+ (self.callback)(client_id, Box::into_raw(Box::new(CWebsocketReason(reason))), self.data);
+ }
+}
+
+
+struct ErrorCallback {
+ pub(crate) callback: extern "C" fn(u64, *mut c_char, *mut c_void),
+ pub(crate) data: *mut c_void,
+}
+
+unsafe impl Send for ErrorCallback {}
+impl WebSocketErrorCallback for ErrorCallback {
+ fn on_error(&self, client_id: u64, error: String) {
+ (self.callback)(client_id, CString::new(error).unwrap().into_raw(), self.data);
+ }
+}
+
+pub struct CClient(Client);
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_client(server: *mut CWebsocketServer, client_id: u64) -> *mut CClient {
+ if server.is_null() {
+ return std::ptr::null_mut();
+ }
+ let server = &*server;
+ match server.server.client(client_id) {
+ None => std::ptr::null_mut(),
+ Some(client) => {
+ Box::into_raw(Box::new(CClient(client)))
+ }
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_client_id(client: *mut CClient) -> u64 {
+ if client.is_null() {
+ return 0;
+ }
+ let client = &*client;
+ client.0.id()
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_client_release(client: *mut CClient) {
+ if !client.is_null() {
+ let _ = Box::from_raw(client);
+ }
+}
+
+#[repr(C)]
+pub enum WebsocketMessageType {
+ Text,
+ Binary,
+ Ping,
+ Pong,
+}
+
+#[no_mangle]
+pub extern "C" fn webserver_websocket_init(options: *const CWebSocketServiceOptions) -> *mut CWebsocketServer {
+ let service_options = unsafe { &*options };
+ Box::into_raw(
+ Box::new(CWebsocketServer { server: Server::new(service_options.into()) })
+ )
+}
+
+#[no_mangle]
+pub extern "C" fn webserver_websocket_release(server: *mut CWebsocketServer) {
+ if !server.is_null() {
+ let _ = unsafe { Box::from_raw(server) };
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_start(server: *mut CWebsocketServer, data: *mut c_void, callback: extern "C" fn(*mut c_char, *mut c_void)) {
+ let server = &*server;
+ server.server.start(Box::new(CCallback {
+ callback,
+ data,
+ }));
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_stop(server: *mut CWebsocketServer, wait: bool, data: *mut c_void, callback: extern "C" fn(*mut c_char, *mut c_void)) {
+ let server = &*server;
+ server.server.stop(wait, Box::new(CCallback { callback, data }));
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_status(server: *mut CWebsocketServer) -> CWebsocketServerStatus {
+ let server = &*server;
+ server.server.status().into()
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_send_ping(server: *mut CWebsocketServer, id: u64, data: *const u8, data_size: usize) {
+ let server = &*server;
+ let message = if data.is_null() || data_size == 0 {
+ Message::Ping(None)
+ } else {
+ let data = slice::from_raw_parts(data, data_size).to_vec();
+ Message::new_ping(Some(data))
+ };
+ server.server.send(message, id);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_broadcast_ping(server: *mut CWebsocketServer, data: *const u8, data_size: usize) {
+ let server = &*server;
+ let message = if data.is_null() || data_size == 0 {
+ Message::Ping(None)
+ } else {
+ let data = slice::from_raw_parts(data, data_size).to_vec();
+ Message::new_ping(Some(data))
+ };
+ server.server.broadcast(message);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_send_pong(server: *mut CWebsocketServer, id: u64, data: *const u8, data_size: usize) {
+ let server = &*server;
+ let message = if data.is_null() || data_size == 0 {
+ None
+ } else {
+ Some(slice::from_raw_parts(data, data_size).to_vec())
+ };
+ let message = Message::new_pong(message);
+ server.server.send(message, id);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_broadcast_pong(server: *mut CWebsocketServer, data: *const u8, data_size: usize) {
+ let server = &*server;
+ let message = if data.is_null() || data_size == 0 {
+ None
+ } else {
+ Some(slice::from_raw_parts(data, data_size).to_vec())
+ };
+ let message = Message::new_pong(message);
+ server.server.broadcast(message);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_broadcast_text(server: *mut CWebsocketServer, message: *const c_char) {
+ let server = &*server;
+ if message.is_null() {
+ return;
+ }
+ let message = CStr::from_ptr(message);
+ let message = message.to_string_lossy();
+ let message = Message::Text(message.to_string().into());
+ server.server.broadcast(message);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_send_text(server: *mut CWebsocketServer, id: u64, message: *const c_char) {
+ let server = &*server;
+ if message.is_null() {
+ return;
+ }
+ let message = CStr::from_ptr(message);
+ let message = message.to_string_lossy();
+ let message = Message::Text(message.to_string().into());
+ server.server.send(message, id);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_send_binary(server: *mut CWebsocketServer, id: u64, data: *const u8, data_size: usize) {
+ let server = &*server;
+ let message = if data.is_null() || data_size == 0 {
+ Message::empty_binary()
+ } else {
+ let data = slice::from_raw_parts(data, data_size).to_vec();
+ Message::new_binary(data)
+ };
+ server.server.send(message, id);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_broadcast_binary(server: *mut CWebsocketServer, data: *const u8, data_size: usize) {
+ let server = &*server;
+ let message = if data.is_null() || data_size == 0 {
+ Message::empty_binary()
+ } else {
+ let data = slice::from_raw_parts(data, data_size).to_vec();
+ Message::new_binary(data)
+ };
+ server.server.broadcast(message);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_set_status_callback(server: *mut CWebsocketServer, data: *mut c_void, callback: extern "C" fn(CServerStatus, *mut c_void)) {
+ let server = &*server;
+ server.server.set_status_callback(Box::new(CStatusCallback { callback, data }));
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_clear_status_callback(server: *mut CWebsocketServer) {
+ let server = &*server;
+ server.server.clear_status_callback();
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_release(message: *mut CWebsocketMessage) {
+ if !message.is_null() {
+ let _ = unsafe { Box::from_raw(message) };
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_type(message: *mut CWebsocketMessage) -> WebsocketMessageType {
+ assert!(!message.is_null());
+ let message = &*message;
+ match &message.0 {
+ Message::Text(_) => WebsocketMessageType::Text,
+ Message::Binary(_) => WebsocketMessageType::Binary,
+ Message::Pong(_) => WebsocketMessageType::Pong,
+ Message::Ping(_) => WebsocketMessageType::Ping,
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_data(message: *mut CWebsocketMessage) -> *const u8 {
+ assert!(!message.is_null());
+ let message = &*message;
+ match &message.0 {
+ Message::Text(_) => std::ptr::null(),
+ Message::Binary(binary) => binary.as_ptr(),
+ Message::Pong(pong) => pong.as_ref().map(|value| value.as_ptr()).unwrap_or(std::ptr::null()),
+ Message::Ping(ping) => ping.as_ref().map(|value| value.as_ptr()).unwrap_or(std::ptr::null()),
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_data_size(message: *mut CWebsocketMessage) -> usize {
+ assert!(!message.is_null());
+ let message = &*message;
+ match &message.0 {
+ Message::Text(_) => 0,
+ Message::Binary(binary) => binary.len(),
+ Message::Pong(pong) => pong.as_ref().map(|value| value.len()).unwrap_or(0),
+ Message::Ping(ping) => ping.as_ref().map(|value| value.len()).unwrap_or(0),
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_create_text(text: *const c_char) -> *mut CWebsocketMessage {
+ if text.is_null() {
+ return Box::into_raw(Box::new(CWebsocketMessage(Message::Text("".into()))));
+ }
+
+ let text = unsafe { CStr::from_ptr(text) }.to_string_lossy();
+ let text = text.to_string();
+ Box::into_raw(Box::new(CWebsocketMessage(Message::Text(text.into()))))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_create_ping(data: *const u8, data_size: usize) -> *mut CWebsocketMessage {
+ if data.is_null() || data_size == 0 {
+ return Box::into_raw(Box::new(CWebsocketMessage(Message::Ping(None))));
+ }
+
+ let data = std::slice::from_raw_parts(data, data_size);
+ Box::into_raw(Box::new(CWebsocketMessage(Message::Ping(Some(data.into())))))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_create_pong(data: *const u8, data_size: usize) -> *mut CWebsocketMessage {
+ if data.is_null() || data_size == 0 {
+ return Box::into_raw(Box::new(CWebsocketMessage(Message::Pong(None))));
+ }
+
+ let data = slice::from_raw_parts(data, data_size);
+ Box::into_raw(Box::new(CWebsocketMessage(Message::Pong(Some(data.into())))))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_create_binary(data: *const u8, data_size: usize) -> *mut CWebsocketMessage {
+ if data.is_null() || data_size == 0 {
+ return Box::into_raw(Box::new(CWebsocketMessage(Message::empty_binary())));
+ }
+
+ let data = slice::from_raw_parts(data, data_size);
+ Box::into_raw(Box::new(CWebsocketMessage(Message::Binary(data.into()))))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_message_text(message: *const CWebsocketMessage) -> *mut c_char {
+ if message.is_null() {
+ return std::ptr::null_mut();
+ }
+
+ let message = &*message;
+ if let Message::Text(text) = &message.0 {
+ return CString::new(text.to_string()).unwrap().into_raw();
+ }
+ std::ptr::null_mut()
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_reason_code(reason: *const CWebsocketReason) -> u16 {
+ if reason.is_null() {
+ return 1000;
+ }
+
+ let reason = &*reason;
+ match &reason.0 {
+ Reason::None => 1000,
+ Reason::Some(reason) => {
+ reason.code.into()
+ }
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_reason_description(reason: *const CWebsocketReason) -> *mut c_char {
+ if reason.is_null() {
+ return std::ptr::null_mut();
+ }
+ let reason = &*reason;
+ match &reason.0 {
+ Reason::None => std::ptr::null_mut(),
+ Reason::Some(reason) => {
+ match reason.description.as_deref() {
+ None => std::ptr::null_mut(),
+ Some(description) => {
+ match CString::new(description.to_owned()) {
+ Ok(description) => description.into_raw(),
+ Err(_) => std::ptr::null_mut(),
+ }
+ }
+ }
+ }
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_reason_release(reason: *mut CWebsocketReason) {
+ if !reason.is_null() {
+ let _ = unsafe { Box::from_raw(reason) };
+ }
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_add_connect_callback(server: *mut CWebsocketServer, data: *mut c_void, callback: extern "C" fn(u64, *mut c_void)) -> u64 {
+ let server = &*server;
+ server.server.add_on_connect(Box::new(ConnectCallback { callback, data }))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_remove_connect_callback(server: *mut CWebsocketServer, id: u64) {
+ let server = &*server;
+ server.server.remove_on_connect(id)
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_add_disconnect_callback(server: *mut CWebsocketServer, data: *mut c_void, callback: extern "C" fn(u64, *mut CWebsocketReason, *mut c_void)) -> u64 {
+ let server = &*server;
+ server.server.add_on_disconnect(Box::new(DisconnectCallback { callback, data }))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_remove_disconnect_callback(server: *mut CWebsocketServer, id: u64) {
+ let server = &*server;
+ server.server.remove_on_connect(id)
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_add_message_callback(server: *mut CWebsocketServer, data: *mut c_void, callback: extern "C" fn(u64, *mut CWebsocketMessage, *mut c_void)) -> u64 {
+ let server = &*server;
+ server.server.add_on_message(Box::new(MessageCallback { callback, data }))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_remove_message_callback(server: *mut CWebsocketServer, id: u64) {
+ let server = &*server;
+ server.server.remove_on_message(id)
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_add_error_callback(server: *mut CWebsocketServer, data: *mut c_void, callback: extern "C" fn(u64, *mut c_char, *mut c_void)) -> u64 {
+ let server = &*server;
+ server.server.add_on_error(Box::new(ErrorCallback { callback, data }))
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn webserver_websocket_remove_error_callback(server: *mut CWebsocketServer, id: u64) {
+ let server = &*server;
+ server.server.remove_on_error(id)
+}
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/.gitignore b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/.gitignore
new file mode 100644
index 00000000..13566b81
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/modules.xml b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/modules.xml
new file mode 100644
index 00000000..3344fcfb
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/vcs.xml b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/vcs.xml
new file mode 100644
index 00000000..4fce1d86
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/web-server-native.iml b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/web-server-native.iml
new file mode 100644
index 00000000..cf84ae4a
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/.idea/web-server-native.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/Cargo.toml b/packages/nativescript-web-server/src-native/web-server-native/crates/server/Cargo.toml
new file mode 100644
index 00000000..0d1df309
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/Cargo.toml
@@ -0,0 +1,15 @@
+[package]
+name = "web-server-native"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+actix-web = "4.9.0"
+actix-files = "0.6.6"
+actix-ws = "0.3.0"
+actix-cors = "0.7.0"
+parking_lot = "0.12.3"
+futures = "0.3.31"
+futures-util = "0.3.31"
+bytestring = "1"
+tokio = {version = "1.41.1", features = ["rt", "rt-multi-thread"]}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/files/index.html b/packages/nativescript-web-server/src-native/web-server-native/crates/server/files/index.html
new file mode 100644
index 00000000..7cd1aa49
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/files/index.html
@@ -0,0 +1,12 @@
+
+
+
+ Page Title
+
+
+
+This is a Heading
+This is a paragraph.
+
+
+
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/lib.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/lib.rs
new file mode 100644
index 00000000..690908bc
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/lib.rs
@@ -0,0 +1,170 @@
+pub mod static_server;
+pub mod websocket_server;
+
+use actix_web::rt::Runtime;
+use actix_web::web::Bytes;
+use parking_lot::lock_api::MappedRwLockReadGuard;
+use parking_lot::{RawRwLock, RwLock, RwLockReadGuard};
+use std::collections::HashMap;
+use std::sync::atomic::AtomicUsize;
+use std::sync::{Arc, LazyLock};
+
+pub trait Callback {
+ fn call(&self);
+}
+
+pub struct CallbackImpl {
+ cb: fn(),
+}
+
+impl Callback for CallbackImpl {
+ fn call(&self) {
+ (self.cb)()
+ }
+}
+
+unsafe impl Send for CallbackImpl {}
+unsafe impl Sync for CallbackImpl {}
+
+
+#[derive(Clone)]
+struct OnStart {
+ id: Arc,
+ callbacks: Arc>>>,
+}
+
+impl Default for OnStart {
+ fn default() -> Self {
+ Self {
+ id: Arc::new(AtomicUsize::new(0)),
+ callbacks: Default::default(),
+ }
+ }
+}
+
+impl OnStart {
+ fn add(&self, cb: Box) -> usize {
+ let id = self.id.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
+ self.callbacks.write().insert(id, cb);
+ id
+ }
+
+ fn remove(&self, id: usize) {
+ self.callbacks.write().remove(&id);
+ }
+}
+
+unsafe impl Send for OnStart {}
+unsafe impl Sync for OnStart {}
+
+#[derive(Clone)]
+struct OnStop {
+ id: Arc,
+ callbacks: Arc>>>,
+}
+
+impl Default for OnStop {
+ fn default() -> Self {
+ Self {
+ id: Arc::new(AtomicUsize::new(0)),
+ callbacks: Default::default(),
+ }
+ }
+}
+
+impl OnStop {
+ fn add(&self, cb: Box) -> usize {
+ let id = self.id.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
+ self.callbacks.write().insert(id, cb);
+ id
+ }
+
+ fn remove(&self, id: usize) {
+ self.callbacks.write().remove(&id);
+ }
+}
+
+
+unsafe impl Send for OnStop {}
+unsafe impl Sync for OnStop {}
+
+
+static ON_START: LazyLock = LazyLock::new(|| Default::default());
+static ON_STOP: LazyLock = LazyLock::new(|| Default::default());
+
+pub fn add_on_start(callback: fn()) -> usize {
+ let cb = CallbackImpl { cb: callback };
+ let cb = Box::new(cb);
+ ON_START.add(cb)
+}
+
+pub fn remove_on_start(id: usize) {
+ ON_START.remove(id);
+}
+
+
+pub fn add_on_stop(callback: fn()) -> usize {
+ let cb = CallbackImpl { cb: callback };
+ let cb = Box::new(cb);
+ ON_STOP.add(cb)
+}
+
+pub fn remove_on_stop(id: usize) {
+ ON_STOP.remove(id);
+}
+
+
+struct RT {
+ runtime: Arc>,
+}
+
+impl Default for RT {
+ fn default() -> Self {
+ let rt = tokio::runtime::Builder::new_multi_thread()
+ .on_thread_start(|| {
+ let lock = ON_START.callbacks.read();
+ for (_, f) in lock.iter() {
+ f.call();
+ }
+ })
+ .on_thread_stop(|| {
+ let lock = ON_STOP.callbacks.read();
+ for (_, f) in lock.iter() {
+ f.call();
+ }
+ })
+ .enable_io()
+ .enable_time()
+ .build()
+ .unwrap();
+
+ let runtime = Arc::new(RwLock::new(Runtime::from(rt)));
+
+ Self { runtime }
+ }
+}
+
+unsafe impl Sync for RT {}
+unsafe impl Send for RT {}
+
+static RUNTIME: LazyLock = LazyLock::new(|| RT::default());
+
+pub fn runtime<'a>() -> MappedRwLockReadGuard<'a, RawRwLock, Runtime> {
+ RwLockReadGuard::map(RUNTIME.runtime.read(), |rt| rt)
+}
+pub fn tokio_runtime<'a>() -> MappedRwLockReadGuard<'a, RawRwLock, tokio::runtime::Runtime> {
+ RwLockReadGuard::map(RUNTIME.runtime.read(), |rt| rt.tokio_runtime())
+}
+
+pub fn release_bytes(bytes: i64) {
+ if bytes == 0 {
+ return;
+ }
+
+ let bytes = bytes as *mut Bytes;
+ if bytes.is_null() {
+ return;
+ }
+
+ let _ = unsafe { Box::from_raw(bytes) };
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/static_server.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/static_server.rs
new file mode 100644
index 00000000..27f79541
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/static_server.rs
@@ -0,0 +1,253 @@
+use crate::RUNTIME;
+use actix_web::dev::ServerHandle;
+use actix_web::web::Data;
+use actix_web::App;
+use parking_lot::{Mutex, RwLock};
+use std::fmt::{Debug, Formatter};
+use std::ops::Deref;
+use std::sync::atomic::{AtomicU8, Ordering};
+use std::sync::Arc;
+
+const ACTIVE_ERROR: &str = "Server has already started";
+
+const INACTIVE_ERROR: &str = "Server has not started";
+const INTERNAL_START_ERROR: &str = "Failed to start server";
+
+#[derive(Debug, Clone)]
+pub struct StaticServiceOptions {
+ pub logger: bool,
+ pub path: String,
+ pub directory: String,
+ pub index: Option,
+ pub host_name: Option,
+ pub port: Option,
+ pub workers: u32,
+ pub show_files: bool,
+}
+
+#[repr(u8)]
+#[derive(Debug, Eq, PartialEq, Clone, Copy)]
+pub enum ServerStatus {
+ Inactive,
+ Active,
+ Crashed,
+ Starting,
+ Stopping,
+}
+
+pub struct Server {
+ handle: Arc>>,
+ config: Arc>,
+ status: Arc,
+ status_callback: Arc>>>,
+}
+
+impl Debug for Server {
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("Server")
+ .field("handle", &self.handle)
+ .field("config", &self.config)
+ .field("status", &self.status)
+ .field("status_callback", &self.status_callback)
+ .finish()
+ }
+}
+
+impl Clone for Server {
+ fn clone(&self) -> Self {
+ Server {
+ handle: Arc::clone(&self.handle),
+ config: Arc::clone(&self.config),
+ status: Arc::clone(&self.status),
+ status_callback: Arc::clone(&self.status_callback),
+ }
+ }
+}
+
+unsafe impl Send for Server {}
+
+unsafe impl Sync for Server {}
+
+pub trait StatusCallback: Send + Debug + Sync {
+ fn on_change(&self, status: ServerStatus);
+}
+
+pub trait Callback: Send {
+ fn on_success(&self);
+ fn on_error(&self, error: String);
+}
+
+impl Server {
+ pub fn new(
+ options: StaticServiceOptions,
+ ) -> Self {
+ Self { handle: Default::default(), config: Arc::new(Mutex::new(options)), status: Default::default(), status_callback: Arc::new(RwLock::new(None)) }
+ }
+
+ pub fn start(&self, callback: Box) {
+ let self_server = self.clone();
+ if self.status.load(Ordering::SeqCst) == ServerStatus::Active as u8 {
+ callback.on_error(ACTIVE_ERROR.to_string())
+ }
+ self.status.store(ServerStatus::Starting as u8, Ordering::SeqCst);
+ let status_callback = self.status_callback.read();
+ if let Some(callback) = status_callback.deref() {
+ callback.on_change(ServerStatus::Starting);
+ drop(status_callback);
+ }
+
+ let status_callback = Arc::clone(&self.status_callback);
+
+ let handle = Arc::clone(&self.handle);
+ let config = Arc::clone(&self.config);
+ let status = Arc::clone(&self.status);
+ let rt_handle = RUNTIME.runtime.read().tokio_runtime().handle().clone();
+ rt_handle.clone().spawn_blocking(move || {
+ let (host_name, port, workers) = {
+ let lock = config.lock();
+ let host_name = match lock.host_name.as_ref() {
+ None => "127.0.0.1".to_string(),
+ Some(name) => name.to_string()
+ };
+
+ let port = lock.port.unwrap_or_else(|| 8080);
+
+ let workers = lock.workers;
+ (host_name, port, workers)
+ };
+
+ let server = actix_web::HttpServer::new(move || {
+ let config = Arc::clone(&config);
+
+ let lock = config.lock();
+ let app = App::new()
+ .app_data(Data::new(self_server.clone()))
+ .wrap(actix_web::middleware::Compress::default());
+
+ let mut directory = std::path::PathBuf::new();
+ directory.push(&lock.directory);
+ let mut files = actix_files::Files::new(lock.path.as_ref(), directory);
+ if lock.show_files {
+ files = files.show_files_listing();
+ }
+ if let Some(index) = lock.index.as_deref() {
+ files = files.index_file(index);
+ }
+
+ app.service(files)
+ })
+ .workers(workers as usize)
+ .bind((host_name.deref(), port));
+
+ rt_handle.block_on(async move {
+ match server {
+ Ok(server) => {
+ let server = server.run();
+
+ {
+ *handle.write() = Some(server.handle());
+ }
+
+ status.store(ServerStatus::Active as u8, Ordering::SeqCst);
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Active);
+ drop(status_callback_lock);
+ }
+
+ callback.on_success();
+ match server.await {
+ Ok(_) => {
+ status.store(ServerStatus::Inactive as u8, Ordering::SeqCst);
+ *handle.write() = None;
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Inactive);
+ drop(status_callback_lock);
+ }
+ }
+ Err(_) => {
+ status.store(ServerStatus::Inactive as u8, Ordering::SeqCst);
+ *handle.write() = None;
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Inactive);
+ drop(status_callback_lock);
+ }
+ }
+ }
+ }
+ Err(error) => {
+ callback.on_error(error.to_string());
+ }
+ }
+ })
+ });
+ }
+
+ pub fn stop(&self, wait: bool, callback: Box) {
+ let rt_handle = RUNTIME.runtime.read().tokio_runtime().handle().clone();
+ let status_callback = Arc::clone(&self.status_callback);
+ if self.status.load(Ordering::SeqCst) == ServerStatus::Active as u8 {
+ if wait {
+ rt_handle.block_on(async {
+ if let Some(handle) = self.handle.read().as_ref() {
+ self.status.store(ServerStatus::Stopping as u8, Ordering::SeqCst);
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Stopping);
+ drop(status_callback_lock);
+ }
+
+ handle.stop(true).await;
+ callback.on_success()
+ }
+ });
+ } else {
+ let handle = self.handle.read().as_ref().map(|handle| handle.clone());
+ if let Some(handle) = handle {
+ let status = Arc::clone(&self.status);
+ rt_handle.clone().spawn_blocking(move || {
+ rt_handle.block_on(async {
+ status.store(ServerStatus::Stopping as u8, Ordering::SeqCst);
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Stopping);
+ drop(status_callback_lock);
+ }
+
+ handle.stop(true).await;
+ callback.on_success()
+ })
+ });
+ }
+ }
+ } else {
+ callback.on_error(INACTIVE_ERROR.to_string())
+ }
+ }
+
+ pub fn set_status_callback(&self, callback: Box) {
+ *self.status_callback.write() = Some(callback);
+ }
+
+ pub fn clear_status_callback(&self) {
+ *self.status_callback.write() = None;
+ }
+
+ pub fn status(&self) -> ServerStatus {
+ match self.status.load(Ordering::SeqCst) {
+ 0 => ServerStatus::Inactive,
+ 1 => ServerStatus::Active,
+ 2 => ServerStatus::Crashed,
+ 3 => ServerStatus::Starting,
+ 4 => ServerStatus::Stopping,
+ _ => unreachable!(),
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/websocket_server.rs b/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/websocket_server.rs
new file mode 100644
index 00000000..2b30462d
--- /dev/null
+++ b/packages/nativescript-web-server/src-native/web-server-native/crates/server/src/websocket_server.rs
@@ -0,0 +1,544 @@
+use crate::static_server::{Callback, ServerStatus, StatusCallback};
+use crate::RUNTIME;
+use actix_web::dev::ServerHandle;
+use actix_web::web::{Bytes, Data};
+use actix_web::{rt, App, Error, HttpRequest, HttpResponse};
+use actix_ws::{AggregatedMessage, CloseReason, Session};
+use bytestring::ByteString;
+use parking_lot::{Mutex, RwLock};
+use std::collections::HashMap;
+use std::fmt::{Debug, Formatter};
+use std::ops::Deref;
+use std::sync::atomic::{AtomicU64, AtomicU8, Ordering};
+use std::sync::Arc;
+use tokio::runtime::Handle;
+
+const ACTIVE_ERROR: &str = "Server has already started";
+
+const INACTIVE_ERROR: &str = "Server has not started";
+const INTERNAL_START_ERROR: &str = "Failed to start server";
+
+#[derive(Debug, Clone)]
+pub struct WebSocketServiceOptions {
+ pub logger: bool,
+ pub path: String,
+ pub host_name: Option,
+ pub port: Option,
+ pub workers: u32,
+ pub auto_pong: bool,
+ pub max_payload: Option,
+}
+
+
+#[derive(Debug, Clone)]
+pub enum Message {
+ Text(ByteString),
+ Binary(Bytes),
+ Pong(Option),
+ Ping(Option),
+}
+impl Message {
+ pub fn new_text(text: impl Into) -> Message {
+ Message::Text(text.into())
+ }
+
+ pub fn new_binary(data: impl Into) -> Message {
+ Message::Binary(data.into())
+ }
+
+ pub fn empty_binary() -> Message {
+ Message::Binary(Bytes::new())
+ }
+
+
+ pub fn new_pong(data: Option>) -> Message {
+ Message::Pong(data.map(Bytes::from))
+ }
+
+ pub fn new_ping(data: Option>) -> Message {
+ Message::Ping(data.map(Bytes::from))
+ }
+}
+
+#[derive(Debug, Clone)]
+pub enum Reason {
+ None,
+ Some(CloseReason),
+}
+
+impl From> for Reason {
+ fn from(value: Option) -> Self {
+ if let Some(reason) = value {
+ return Self::Some(reason);
+ }
+ Self::None
+ }
+}
+
+impl Into> for Reason {
+ fn into(self) -> Option {
+ match self {
+ Reason::None => None,
+ Reason::Some(reason) => Some(reason)
+ }
+ }
+}
+pub trait WebSocketConnectCallback: Send {
+ fn on_connect(&self, client_id: u64);
+}
+pub trait WebSocketDisconnectCallback: Send {
+ fn on_disconnect(&self, client_id: u64, reason: Reason);
+}
+pub trait WebSocketMessageCallback: Send {
+ fn on_message(&self, client_id: u64, message: Message);
+}
+
+pub trait WebSocketErrorCallback: Send {
+ fn on_error(&self, client_id: u64, error: String);
+}
+
+pub struct Server {
+ next_id: Arc,
+ next_client_id: Arc,
+ handle: Arc>>,
+ config: Arc>,
+ status: Arc,
+ status_callback: Arc>>>,
+ clients: Arc>>,
+ connect_callback: Arc>>>,
+ disconnect_callback: Arc>>>,
+ message_callback: Arc>>>,
+ error_callback: Arc>>>,
+}
+
+impl Debug for Server {
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("Server")
+ .field("handle", &self.handle)
+ .field("config", &self.config)
+ .field("status", &self.status)
+ .field("status_callback", &self.status_callback)
+ .field("clients", &self.clients)
+ .finish()
+ }
+}
+
+impl Clone for Server {
+ fn clone(&self) -> Self {
+ Server {
+ next_id: Arc::clone(&self.next_id),
+ next_client_id: Arc::clone(&self.next_client_id),
+ handle: Arc::clone(&self.handle),
+ config: Arc::clone(&self.config),
+ status: Arc::clone(&self.status),
+ status_callback: Arc::clone(&self.status_callback),
+ clients: Arc::clone(&self.clients),
+ connect_callback: Arc::clone(&self.connect_callback),
+ disconnect_callback: Arc::clone(&self.disconnect_callback),
+ message_callback: Arc::clone(&self.message_callback),
+ error_callback: Arc::clone(&self.error_callback),
+ }
+ }
+}
+
+unsafe impl Send for Server {}
+
+unsafe impl Sync for Server {}
+
+#[derive(Clone)]
+pub struct Client {
+ id: u64,
+ session: Session,
+ // todo use arc
+ headers: Arc>>,
+}
+
+impl Client {
+ pub fn id(&self) -> u64 {
+ self.id
+ }
+
+ pub fn headers(&self) -> &Arc>> {
+ &self.headers
+ }
+}
+
+impl Debug for Client {
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("Client")
+ .field("id", &self.id)
+ .finish()
+ }
+}
+
+impl Server {
+ pub fn new(
+ options: WebSocketServiceOptions,
+ ) -> Self {
+ Self { next_id: Arc::new(AtomicU64::new(1)), next_client_id: Arc::new(AtomicU64::new(1)), handle: Default::default(), config: Arc::new(Mutex::new(options)), status: Default::default(), status_callback: Arc::new(RwLock::new(None)), clients: Arc::new(Default::default()), connect_callback: Arc::new(Default::default()), disconnect_callback: Arc::new(Default::default()), message_callback: Arc::new(Default::default()), error_callback: Arc::new(Default::default()) }
+ }
+
+ async fn handle_ws(req: HttpRequest, stream: actix_web::web::Payload, data: Data) -> Result {
+ let (mut res, session, stream) = actix_ws::handle(&req, stream)?;
+
+ let (policy, _max_payload, auto_pong) = {
+ let lock = data.config.lock();
+ (format!("connect-src https: ws://{}:{};", lock.host_name.as_deref().unwrap_or("localhost"), lock.port.unwrap_or(8081)), lock.max_payload.unwrap_or(100 * 1024 * 1024), lock.auto_pong)
+ };
+
+ res.headers_mut()
+ .append(actix_web::http::header::CONTENT_SECURITY_POLICY, actix_web::http::header::HeaderValue::try_from(policy)?);
+
+ let mut headers = HashMap::new();
+ for (k, v) in res.headers_mut().iter() {
+ if let Ok(v) = v.to_str() {
+ headers.insert(k.to_string(), v.to_string());
+ }
+ }
+ let headers = Arc::new(RwLock::new(headers));
+ let id = data.next_client_id.fetch_add(1, Ordering::SeqCst);
+ let client = Client { id, session: session.clone(), headers: headers.clone() };
+ {
+ data.clients.write().insert(id, client);
+ }
+ let client = Client { id, session: session.clone(), headers };
+
+
+ let mut stream = stream
+ .aggregate_continuations()
+ .max_continuation_size(1024 * 1024 * 8);
+
+ let connect_callback = Arc::clone(&data.connect_callback);
+
+ {
+ let lock = connect_callback.read();
+ for (_, cb) in &*lock {
+ cb.on_connect(id);
+ }
+ }
+
+ rt::spawn(async move {
+ while let Some(msg) = stream.recv().await {
+ match msg {
+ Ok(AggregatedMessage::Text(text)) => {
+ let mut lock = data.message_callback.write();
+ for (_, cb) in lock.iter_mut() {
+ cb.on_message(id, Message::Text(text.clone()));
+ }
+ }
+
+ Ok(AggregatedMessage::Binary(bin)) => {
+ let mut lock = data.message_callback.write();
+ for (_, cb) in lock.iter_mut() {
+ cb.on_message(id, Message::Binary(bin.clone()));
+ }
+ }
+
+ Ok(AggregatedMessage::Ping(msg)) => {
+ if auto_pong {
+ if let Err(_) = client.clone().session.pong(msg.as_ref()).await {}
+ } else {
+ let mut lock = data.message_callback.write();
+ for (_, cb) in lock.iter_mut() {
+ cb.on_message(id, Message::Ping(Some(msg.clone())));
+ }
+ }
+ }
+
+ Ok(AggregatedMessage::Pong(msg)) => {
+ let mut lock = data.message_callback.write();
+ for (_, cb) in lock.iter_mut() {
+ cb.on_message(id, Message::Pong(Some(msg.clone())));
+ }
+ }
+
+ Ok(AggregatedMessage::Close(close_reason)) => {
+ let reason = Reason::from(close_reason);
+ let reason_2 = reason.clone();
+ let _ = client.session.close(reason_2.into()).await;
+ let mut lock = data.disconnect_callback.write();
+ for (_, cb) in lock.iter_mut() {
+ cb.on_disconnect(id, reason.clone());
+ }
+ break;
+ }
+
+ Err(error) => {
+ let mut lock = data.error_callback.write();
+ let error = error.to_string();
+ for (_, cb) in lock.iter_mut() {
+ cb.on_error(id, error.clone());
+ }
+ }
+ }
+ }
+ let _ = session.close(None).await;
+ let mut lock = data.clients.write();
+ lock.remove(&id);
+ });
+ Ok(res)
+ }
+
+ pub fn client(&self, client_id: u64) -> Option {
+ self.clients.read().get(&client_id).cloned()
+ }
+
+ pub fn clients(&self) -> Vec {
+ self.clients.read().values().cloned().collect()
+ }
+ pub fn start(&self, callback: Box) {
+ let self_server = self.clone();
+ if self.status.load(Ordering::SeqCst) == ServerStatus::Active as u8 {
+ callback.on_error(ACTIVE_ERROR.to_string());
+ return;
+ }
+ self.status.store(ServerStatus::Starting as u8, Ordering::SeqCst);
+ let status_callback = self.status_callback.read();
+ if let Some(callback) = status_callback.deref() {
+ callback.on_change(ServerStatus::Starting);
+ drop(status_callback);
+ }
+
+ let status_callback = Arc::clone(&self.status_callback);
+ let handle = Arc::clone(&self.handle);
+ let config = Arc::clone(&self.config);
+ let status = Arc::clone(&self.status);
+ let rt_handle = RUNTIME.runtime.read().tokio_runtime().handle().clone();
+ rt_handle.spawn_blocking(move || {
+ let rt_handle = Handle::current();
+ rt_handle.block_on(async move {
+ let (host_name, port, workers) = {
+ let lock = config.lock();
+ let host_name = match lock.host_name.as_ref() {
+ None => "127.0.0.1".to_string(),
+ Some(name) => name.to_string()
+ };
+
+ let port = lock.port.unwrap_or_else(|| 8081);
+
+ let workers = lock.workers;
+ (host_name, port, workers)
+ };
+
+ let server = actix_web::HttpServer::new(move || {
+ let config = Arc::clone(&config);
+ let lock = config.lock();
+ let app = App::new()
+ .app_data(Data::new(self_server.clone()))
+ .wrap(actix_web::middleware::Compress::default());
+ app
+ .route(lock.path.as_ref(), actix_web::web::get().to(Self::handle_ws))
+ })
+ .workers(workers as usize)
+ .bind((host_name.deref(), port));
+
+ match server {
+ Ok(server) => {
+ let server = server.run();
+
+ {
+ *handle.write() = Some(server.handle());
+ }
+
+ status.store(ServerStatus::Active as u8, Ordering::SeqCst);
+
+ {
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Active);
+ drop(status_callback_lock);
+ }
+ }
+
+ callback.on_success();
+
+ match server.await {
+ Ok(_) => {
+ status.store(ServerStatus::Inactive as u8, Ordering::SeqCst);
+ *handle.write() = None;
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Inactive);
+ drop(status_callback_lock);
+ }
+ }
+ Err(_) => {
+ status.store(ServerStatus::Inactive as u8, Ordering::SeqCst);
+ *handle.write() = None;
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Inactive);
+ drop(status_callback_lock);
+ }
+ }
+ }
+ }
+ Err(error) => {
+ callback.on_error(error.to_string());
+ }
+ }
+ })
+ });
+ }
+
+ pub fn stop(&self, wait: bool, callback: Box) {
+ let rt_handle = RUNTIME.runtime.read().tokio_runtime().handle().clone();
+ let status_callback = Arc::clone(&self.status_callback);
+ if self.status.load(Ordering::SeqCst) == ServerStatus::Active as u8 {
+ if wait {
+ rt_handle.block_on(async {
+ if let Some(handle) = self.handle.read().as_ref() {
+ self.status.store(ServerStatus::Stopping as u8, Ordering::SeqCst);
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Stopping);
+ drop(status_callback_lock);
+ }
+
+ handle.stop(true).await;
+ callback.on_success()
+ }
+ });
+ } else {
+ let handle = self.handle.read().as_ref().map(|handle| handle.clone());
+ if let Some(handle) = handle {
+ let status = Arc::clone(&self.status);
+ rt_handle.clone().spawn_blocking(move || {
+ rt_handle.block_on(async {
+ status.store(ServerStatus::Stopping as u8, Ordering::SeqCst);
+
+ let status_callback_lock = status_callback.read();
+ if let Some(callback) = status_callback_lock.deref() {
+ callback.on_change(ServerStatus::Stopping);
+ drop(status_callback_lock);
+ }
+
+ handle.stop(true).await;
+ callback.on_success()
+ })
+ });
+ }
+ }
+ } else {
+ callback.on_error(INACTIVE_ERROR.to_string())
+ }
+ }
+
+ pub fn broadcast(&self, message: Message) {
+ let status = self.status.load(Ordering::SeqCst);
+ if status == ServerStatus::Active as u8 {
+ let clients = Arc::clone(&self.clients);
+ let rt_handle = RUNTIME.runtime.read().tokio_runtime().handle().clone();
+ rt_handle.spawn(async move {
+ let mut clients: Vec<_> = clients.write().iter().map(|client| client.1.session.clone()).collect();
+ match message {
+ Message::Text(text) => {
+ for session in clients.iter_mut() {
+ let _ = session.text(text.clone()).await;
+ }
+ }
+ Message::Binary(bin) => {
+ for session in clients.iter_mut() {
+ let _ = session.binary(bin.clone()).await;
+ }
+ }
+ _ => {}
+ }
+ });
+ }
+ }
+
+ pub fn send(&self, message: Message, id: u64) {
+ let status = self.status.load(Ordering::SeqCst);
+ if status == ServerStatus::Active as u8 {
+ let clients = Arc::clone(&self.clients);
+ let rt_handle = RUNTIME.runtime.read().tokio_runtime().handle().clone();
+ rt_handle.spawn(async move {
+ let session = {
+ let clients = clients.read();
+ clients.get(&id).map(|client| client.session.clone())
+ };
+ if let Some(mut session) = session {
+ match message {
+ Message::Text(text) => {
+ let _ = session.text(text.clone()).await;
+ }
+ Message::Binary(bin) => {
+ let _ = session.binary(bin).await;
+ }
+ Message::Pong(msg) => {
+ let msg = msg.as_deref().unwrap_or(b"");
+ let _ = session.pong(msg).await;
+ }
+ Message::Ping(msg) => {
+ let msg = msg.as_deref().unwrap_or(b"");
+ let _ = session.pong(msg).await;
+ }
+ }
+ }
+ });
+ }
+ }
+
+ pub fn set_status_callback(&self, callback: Box) {
+ *self.status_callback.write() = Some(callback);
+ }
+
+ pub fn clear_status_callback(&self) {
+ *self.status_callback.write() = None;
+ }
+
+ pub fn add_on_connect(&self, callback: Box) -> u64 {
+ let next_id = self.next_id.fetch_add(1, Ordering::SeqCst);
+ self.connect_callback.write().insert(next_id, callback);
+ next_id
+ }
+
+ pub fn remove_on_connect(&self, id: u64) {
+ self.connect_callback.write().remove(&id);
+ }
+
+ pub fn add_on_message(&self, callback: Box) -> u64 {
+ let next_id = self.next_id.fetch_add(1, Ordering::SeqCst);
+ self.message_callback.write().insert(next_id, callback);
+ next_id
+ }
+
+ pub fn remove_on_message(&self, id: u64) {
+ self.message_callback.write().remove(&id);
+ }
+
+ pub fn add_on_disconnect(&self, callback: Box) -> u64 {
+ let next_id = self.next_id.fetch_add(1, Ordering::SeqCst);
+ self.disconnect_callback.write().insert(next_id, callback);
+ next_id
+ }
+
+ pub fn remove_on_disconnect(&self, id: u64) {
+ self.disconnect_callback.write().remove(&id);
+ }
+
+ pub fn add_on_error(&self, callback: Box) -> u64 {
+ let next_id = self.next_id.fetch_add(1, Ordering::SeqCst);
+ self.error_callback.write().insert(next_id, callback);
+ next_id
+ }
+
+ pub fn remove_on_error(&self, id: u64) {
+ self.error_callback.write().remove(&id);
+ }
+
+ pub fn status(&self) -> ServerStatus {
+ match self.status.load(Ordering::SeqCst) {
+ 0 => ServerStatus::Inactive,
+ 1 => ServerStatus::Active,
+ 2 => ServerStatus::Crashed,
+ 3 => ServerStatus::Starting,
+ 4 => ServerStatus::Stopping,
+ _ => unreachable!(),
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/nativescript-web-server/tsconfig.json b/packages/nativescript-web-server/tsconfig.json
new file mode 100644
index 00000000..db2ea4cb
--- /dev/null
+++ b/packages/nativescript-web-server/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../dist/out-tsc",
+ "rootDir": "."
+ },
+ "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular", "src-native"],
+ "include": ["**/*.ts", "references.d.ts"]
+}
diff --git a/packages/nativescript-web-server/typings/android.d.ts b/packages/nativescript-web-server/typings/android.d.ts
new file mode 100644
index 00000000..e8f93e66
--- /dev/null
+++ b/packages/nativescript-web-server/typings/android.d.ts
@@ -0,0 +1,217 @@
+declare namespace io {
+ export namespace nstudio {
+ export namespace plugins {
+ export namespace webserver {
+ export class GC {
+ public static class: java.lang.Class;
+ public restartWatch(): void;
+ public static getInstance(): io.nstudio.plugins.webserver.GC;
+ public static watchObject(key: number, value: java.nio.ByteBuffer): void;
+ public constructor();
+ public static getBufferRefQue(): java.lang.ref.ReferenceQueue;
+ public watchItem(value: io.nstudio.plugins.webserver.GC.Object): void;
+ }
+ export namespace GC {
+ export class BufferWrapper extends io.nstudio.plugins.webserver.GC.Object {
+ public static class: java.lang.Class;
+ public constructor(nativePtr: number, value: any);
+ public getValue(): any;
+ public dispose(): void;
+ }
+ export class Companion {
+ public static class: java.lang.Class;
+ public getBufferRefQue(): java.lang.ref.ReferenceQueue;
+ public getInstance(): io.nstudio.plugins.webserver.GC;
+ public watchObject(key: number, value: java.nio.ByteBuffer): void;
+ }
+ export class Object {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.GC$Object interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ dispose(): void;
+ });
+ public constructor();
+ public dispose(): void;
+ }
+ }
+ }
+ }
+ }
+}
+
+declare namespace io {
+ export namespace nstudio {
+ export namespace plugins {
+ export namespace webserver {
+ export class Server {
+ public static class: java.lang.Class;
+ public start(callback: io.nstudio.plugins.webserver.Server.Callback): void;
+ public constructor(logger: boolean, path: string, directory: string, index: string, hostName: string, port: number, workers: number, showFiles: boolean);
+ public stop(wait: boolean, callback: io.nstudio.plugins.webserver.Server.Callback): void;
+ public setStatusCallback(callback: io.nstudio.plugins.webserver.Server.StatusCallback): void;
+ public finalize(): void;
+ public getStatus(): number;
+ }
+ export namespace Server {
+ export class Callback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.Server$Callback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onError(param0: string): void;
+ onSuccess(): void;
+ });
+ public constructor();
+ public onSuccess(): void;
+ public onError(param0: string): void;
+ }
+ export class Companion {
+ public static class: java.lang.Class;
+ }
+ export class StatusCallback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.Server$StatusCallback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onChange(param0: number): void;
+ });
+ public constructor();
+ public onChange(param0: number): void;
+ }
+ }
+ }
+ }
+ }
+}
+
+declare namespace io {
+ export namespace nstudio {
+ export namespace plugins {
+ export namespace webserver {
+ export namespace websocket {
+ export class Server {
+ public static class: java.lang.Class;
+ public start(callback: io.nstudio.plugins.webserver.websocket.Server.Callback): void;
+ public broadcastPing(it: java.nio.ByteBuffer): void;
+ public removeOnError(id: number): void;
+ public send(binary: java.nio.ByteBuffer, id: number): void;
+ public constructor(logger: boolean, path: string, maxPayload: number, hostName: string, port: number, workers: number, autoPong: boolean);
+ public addOnConnect(callback: io.nstudio.plugins.webserver.websocket.Server.ConnectCallback): number;
+ public finalize(): void;
+ public setStatusCallback(callback: io.nstudio.plugins.webserver.websocket.Server.StatusCallback): void;
+ public broadcastPong(it: java.nio.ByteBuffer): void;
+ public removeOnConnect(id: number): void;
+ public broadcast(text: string): void;
+ public removeOnPing(id: number): void;
+ public addOnPong(callback: io.nstudio.plugins.webserver.websocket.Server.MessageCallback): number;
+ public ping(it: java.nio.ByteBuffer, this_: number): void;
+ public addOnError(callback: io.nstudio.plugins.webserver.websocket.Server.ErrorCallback): number;
+ public removeOnDisconnect(id: number): void;
+ public removeOnMessage(id: number): void;
+ public addOnDisconnect(callback: io.nstudio.plugins.webserver.websocket.Server.DisconnectCallback): number;
+ public stop(wait: boolean, callback: io.nstudio.plugins.webserver.websocket.Server.Callback): void;
+ public pong(it: java.nio.ByteBuffer, this_: number): void;
+ public send(text: string, id: number): void;
+ public broadcast(binary: java.nio.ByteBuffer): void;
+ public addOnMessage(callback: io.nstudio.plugins.webserver.websocket.Server.MessageCallback): number;
+ public addOnPing(callback: io.nstudio.plugins.webserver.websocket.Server.MessageCallback): number;
+ public removeOnPong(id: number): void;
+ public static nativeAddOnMessage(param0: number, param1: io.nstudio.plugins.webserver.websocket.Server.MessageCallback): number;
+ public getStatus(): number;
+ }
+ export namespace Server {
+ export class Callback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.websocket.Server$Callback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onError(param0: string): void;
+ onSuccess(): void;
+ });
+ public constructor();
+ public onSuccess(): void;
+ public onError(param0: string): void;
+ }
+ export class Client {
+ public static class: java.lang.Class;
+ public constructor(native_: number, server: io.nstudio.plugins.webserver.websocket.Server);
+ }
+ export class Companion {
+ public static class: java.lang.Class;
+ public nativeAddOnMessage(server: number, callback: io.nstudio.plugins.webserver.websocket.Server.MessageCallback): number;
+ }
+ export class ConnectCallback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.websocket.Server$ConnectCallback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onConnect(param0: number): void;
+ });
+ public constructor();
+ public onConnect(param0: number): void;
+ }
+ export class DisconnectCallback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.websocket.Server$DisconnectCallback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onDisconnect(param0: number, param1: number, param2: string): void;
+ });
+ public constructor();
+ public onDisconnect(param0: number, param1: number, param2: string): void;
+ }
+ export class ErrorCallback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.websocket.Server$ErrorCallback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onError(param0: number, param1: string): void;
+ });
+ public constructor();
+ public onError(param0: number, param1: string): void;
+ }
+ export class MessageCallback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.websocket.Server$MessageCallback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onMessage(param0: number, param1: string): void;
+ onMessage(param0: number, param1: java.nio.ByteBuffer): void;
+ onPing(param0: number, param1: java.nio.ByteBuffer): void;
+ onPong(param0: number, param1: java.nio.ByteBuffer): void;
+ });
+ public constructor();
+ public onPong(param0: number, param1: java.nio.ByteBuffer): void;
+ public onMessage(param0: number, param1: string): void;
+ public onPing(param0: number, param1: java.nio.ByteBuffer): void;
+ public onMessage(param0: number, param1: java.nio.ByteBuffer): void;
+ }
+ export class StatusCallback {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the io.nstudio.plugins.webserver.websocket.Server$StatusCallback interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onChange(param0: number): void;
+ });
+ public constructor();
+ public onChange(param0: number): void;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+//Generics information:
+
diff --git a/packages/nativescript-web-server/typings/objc!WebServerNative.d.ts b/packages/nativescript-web-server/typings/objc!WebServerNative.d.ts
new file mode 100644
index 00000000..f202dabf
--- /dev/null
+++ b/packages/nativescript-web-server/typings/objc!WebServerNative.d.ts
@@ -0,0 +1,288 @@
+
+declare const enum CServerStatus {
+
+ Inactive = 0,
+
+ Active = 1,
+
+ Crashed = 2,
+
+ Starting = 3,
+
+ Stopping = 4
+}
+
+interface CStaticServiceOptions {
+ logger: boolean;
+ path: string;
+ directory: string;
+ index: string;
+ host_name: string;
+ port: number;
+ workers: number;
+ show_files: boolean;
+}
+declare var CStaticServiceOptions: interop.StructType;
+
+interface CWebSocketServiceOptions {
+ logger: boolean;
+ path: string;
+ max_payload: number;
+ host_name: string;
+ port: number;
+ workers: number;
+ auto_pong: boolean;
+}
+declare var CWebSocketServiceOptions: interop.StructType;
+
+declare const enum CWebsocketServerStatus {
+
+ Inactive = 0,
+
+ Active = 1,
+
+ Crashed = 2,
+
+ Starting = 3,
+
+ Stopping = 4
+}
+
+declare class NSCClient extends NSObject {
+
+ static alloc(): NSCClient; // inherited from NSObject
+
+ static new(): NSCClient; // inherited from NSObject
+
+ readonly id: number;
+}
+
+declare class NSCMessage extends NSObject {
+
+ static alloc(): NSCMessage; // inherited from NSObject
+
+ static new(): NSCMessage; // inherited from NSObject
+
+ readonly data: NSData;
+
+ readonly text: string;
+
+ readonly type: NSCMessageType;
+}
+
+declare const enum NSCMessageType {
+
+ Text = 0,
+
+ Binary = 1,
+
+ Ping = 2,
+
+ Pong = 3
+}
+
+declare class NSCServer extends NSObject {
+
+ static alloc(): NSCServer; // inherited from NSObject
+
+ static new(): NSCServer; // inherited from NSObject
+
+ readonly status: NSCServerStatus;
+
+ constructor();
+
+ init(logger: boolean, path: string, directory: string, index: string, hostName: string, port: number, workers: number, showFiles: boolean): this;
+
+ setStatusChangeCallback(callback: (p1: NSCServerStatus) => void): void;
+
+ start(callback: (p1: string) => void): void;
+
+ stop(wait: boolean, callback: (p1: string) => void): void;
+}
+
+declare const enum NSCServerStatus {
+
+ Inactive = 0,
+
+ Active = 1,
+
+ Crashed = 2,
+
+ Starting = 3,
+
+ Stopping = 4
+}
+
+declare class NSCWebSocketServer extends NSObject {
+
+ static alloc(): NSCWebSocketServer; // inherited from NSObject
+
+ static new(): NSCWebSocketServer; // inherited from NSObject
+
+ readonly status: NSCServerStatus;
+
+ constructor();
+
+ addOnConnect(callback: (p1: NSCClient) => void): number;
+
+ addOnDisconnect(callback: (p1: NSCClient, p2: number, p3: string) => void): number;
+
+ addOnError(callback: (p1: NSCClient, p2: string) => void): number;
+
+ addOnMessage(callback: (p1: NSCClient, p2: NSCMessage) => void): number;
+
+ addOnPing(callback: (p1: NSCClient, p2: NSData) => void): number;
+
+ addOnPong(callback: (p1: NSCClient, p2: NSData) => void): number;
+
+ broadcast(text: string): void;
+
+ broadcastEmptyPing(): void;
+
+ broadcastEmptyPong(): void;
+
+ broadcastWithBinary(binary: NSData): void;
+
+ broadcastWithPing(ping: NSData): void;
+
+ broadcastWithPong(pong: NSData): void;
+
+ init(logger: boolean, path: string, maxPayload: number, hostName: string, port: number, workers: number, autoPong: boolean): this;
+
+ removeOnConnect(id: number): void;
+
+ removeOnDisconnect(id: number): void;
+
+ removeOnError(id: number): void;
+
+ removeOnMessage(id: number): void;
+
+ removeOnPing(id: number): void;
+
+ removeOnPong(id: number): void;
+
+ sendEmptyPingWithId(id: number): void;
+
+ sendEmptyPongWithId(id: number): void;
+
+ sendWithBinaryId(binary: NSData, id: number): void;
+
+ sendWithPingId(ping: NSData, id: number): void;
+
+ sendWithPongId(pong: NSData, id: number): void;
+
+ sendWithTextId(text: string, id: number): void;
+
+ setStatusChangeCallback(callback: (p1: NSCServerStatus) => void): void;
+
+ start(callback: (p1: string) => void): void;
+
+ stop(wait: boolean, callback: (p1: string) => void): void;
+}
+
+declare var WebServerNativeVersionNumber: number;
+
+declare var WebServerNativeVersionString: interop.Reference;
+
+declare const enum WebsocketMessageType {
+
+ Text = 0,
+
+ Binary = 1,
+
+ Ping = 2,
+
+ Pong = 3
+}
+
+declare function webserver_clear_status_callback(server: interop.Pointer | interop.Reference): void;
+
+declare function webserver_error_release(error: string | interop.Pointer | interop.Reference): void;
+
+declare function webserver_init(options: interop.Pointer | interop.Reference): interop.Pointer | interop.Reference;
+
+declare function webserver_release(server: interop.Pointer | interop.Reference): void;
+
+declare function webserver_set_status_callback(server: interop.Pointer | interop.Reference, data: interop.Pointer | interop.Reference, callback: interop.FunctionReference<(p1: CServerStatus, p2: interop.Pointer | interop.Reference) => void>): void;
+
+declare function webserver_start(server: interop.Pointer | interop.Reference, data: interop.Pointer | interop.Reference, callback: interop.FunctionReference<(p1: string, p2: interop.Pointer | interop.Reference) => void>): void;
+
+declare function webserver_status(server: interop.Pointer | interop.Reference): CServerStatus;
+
+declare function webserver_stop(server: interop.Pointer | interop.Reference, wait: boolean, data: interop.Pointer | interop.Reference, callback: interop.FunctionReference<(p1: string, p2: interop.Pointer | interop.Reference) => void>): void;
+
+declare function webserver_websocket_add_connect_callback(server: interop.Pointer | interop.Reference, data: interop.Pointer | interop.Reference, callback: interop.FunctionReference<(p1: number, p2: interop.Pointer | interop.Reference) => void>): number;
+
+declare function webserver_websocket_add_disconnect_callback(server: interop.Pointer | interop.Reference, data: interop.Pointer | interop.Reference, callback: interop.FunctionReference<(p1: number, p2: interop.Pointer | interop.Reference, p3: interop.Pointer | interop.Reference) => void>): number;
+
+declare function webserver_websocket_add_error_callback(server: interop.Pointer | interop.Reference, data: interop.Pointer | interop.Reference, callback: interop.FunctionReference<(p1: number, p2: string, p3: interop.Pointer | interop.Reference) => void>): number;
+
+declare function webserver_websocket_add_message_callback(server: interop.Pointer | interop.Reference, data: interop.Pointer | interop.Reference, callback: interop.FunctionReference<(p1: number, p2: interop.Pointer | interop.Reference, p3: interop.Pointer | interop.Reference) => void>): number;
+
+declare function webserver_websocket_broadcast_binary(server: interop.Pointer | interop.Reference