diff --git a/frameworks/ets/ani/net_ssl/ets/@ohos.net.networkSecurity.d.ets b/frameworks/ets/ani/net_ssl/ets/@ohos.net.networkSecurity.d.ets index 76f710f33fb1a0ea51ede0cfbd537cb037b54d95..d7f6f504a884a7fe8e5509a93ca0143488a5ffc2 100644 --- a/frameworks/ets/ani/net_ssl/ets/@ohos.net.networkSecurity.d.ets +++ b/frameworks/ets/ani/net_ssl/ets/@ohos.net.networkSecurity.d.ets @@ -35,7 +35,7 @@ export default namespace networkSecurity { return new Promise((resolve, reject) => { taskpool.execute((): int => { return certVerificationAsync(cert, caCert); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as int); }, (err: Error): void => { reject(err as BusinessError); diff --git a/frameworks/ets/ani/web_socket/ets/@ohos.net.webSocket.d.ets b/frameworks/ets/ani/web_socket/ets/@ohos.net.webSocket.d.ets new file mode 100644 index 0000000000000000000000000000000000000000..7f64c73d963db5008ab4fafef1c7c517f835531b --- /dev/null +++ b/frameworks/ets/ani/web_socket/ets/@ohos.net.webSocket.d.ets @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * 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 + * + * http://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. + */ + + +import type { AsyncCallback, ErrorCallback, Callback } from '@ohos.base'; +import type connection from '@ohos.net.connection'; +import { BusinessError } from '@ohos.base'; + +export default namespace webSocket { + type HttpProxy = connection.HttpProxy; + + loadLibrary("websocket_ani"); + + class Cleaner { + private ptr: long = 0 + constructor(ptr:long) { + this.ptr = ptr + } + native clean(): void + } + + export native function createWebSocket(): WebSocket; + + let destroyRegister = new FinalizationRegistry((cleaner: Cleaner) => {cleaner.clean()}) + let unregisterToken = new object() + + export interface WebSocketRequestOptions { + header?: Record; + + caPath?: string; + + clientCert?: ClientCert; + + proxy?: ProxyConfiguration; + + protocol?: string; + } + + export type ProxyConfiguration = 'system' | 'no-proxy' | HttpProxy; + + export interface ClientCert { + certPath: string; + + keyPath: string; + + keyPassword?: string; + } + + export interface WebSocketCloseOptions { + code?: int; + reason?: string; + } + + export interface CloseResult { + code: int; + reason: string; + } + + // export type ResponseHeaders = { + // [k: string]: string | string[] | undefined; + // } + + export interface WebSocket { + connect(url: string, callback: AsyncCallback): void; + + connect(url: string, options: WebSocketRequestOptions, callback: AsyncCallback): void; + + connect(url: string, options?: WebSocketRequestOptions): Promise; + + send(data: string | ArrayBuffer, callback: AsyncCallback): void; + + send(data: string | ArrayBuffer): Promise; + + close(callback: AsyncCallback): void; + + close(options: WebSocketCloseOptions, callback: AsyncCallback): void; + + close(options?: WebSocketCloseOptions): Promise; + + // on(type: 'open', callback: AsyncCallback): void; + + // off(type: 'open', callback?: AsyncCallback): void; + + // on(type: 'message', callback: AsyncCallback): void; + + // off(type: 'message', callback?: AsyncCallback): void; + + // on(type: 'close', callback: AsyncCallback): void; + + // off(type: 'close', callback?: AsyncCallback): void; + + // on(type: 'error', callback: ErrorCallback): void; + + // off(type: 'error', callback?: ErrorCallback): void; + + // on(type: 'dataEnd', callback: Callback): void; + + // off(type: 'dataEnd', callback?: Callback): void; + + // on(type: 'headerReceive', callback: Callback): void; + + // off(type: 'headerReceive', callback?: Callback): void; + } + + export class WebSocketInner implements WebSocket { + private nativePtr:long = 0; + private cleaner: Cleaner | null = null; + + constructor(context:long) { + if(this.nativePtr == 0){ + this.nativePtr = context; + } + this.registerCleaner(this.nativePtr) + } + + registerCleaner(ptr: long): void { + this.cleaner = new Cleaner(ptr) + destroyRegister.register(this, this.cleaner!, unregisterToken); + } + unregisterCleaner(): void { + destroyRegister.unregister(unregisterToken); + } + + native connectSync(url: string, options?: WebSocketRequestOptions): boolean; + + connect(url: string, callback: AsyncCallback): void { + let p1 = taskpool.execute((): boolean => { + return this.connectSync(url); + }) + p1.then((content: Any) => { + callback(new BusinessError(), content as boolean); + }, (err: Error): void => { + callback(err as BusinessError, false); + }); + } + + connect(url: string, options: WebSocketRequestOptions, callback: AsyncCallback): void { + let p1 = taskpool.execute((): boolean => { + return this.connectSync(url, options); + }) + p1.then((content: Any) => { + callback(new BusinessError(), content as boolean); + }, (err: Error): void => { + callback(err as BusinessError, false); + }); + } + + connect(url: string, options?: WebSocketRequestOptions): Promise { + return new Promise((resolve, reject) => { + taskpool.execute((): boolean => { + return this.connectSync(url, options); + }).then((content: Any) => { + resolve(content as boolean); + }, (err: Error): void => { + reject(err as BusinessError); + }); + }); + } + + native sendSync(data: string | ArrayBuffer): boolean; + + send(data: string | ArrayBuffer, callback: AsyncCallback): void { + let p1 = taskpool.execute((): boolean => { + return this.sendSync(data); + }) + p1.then((content: Any) => { + callback(new BusinessError(), content as boolean); + }, (err: Error): void => { + callback(err as BusinessError, false); + }); + } + + send(data: string | ArrayBuffer): Promise { + return new Promise((resolve, reject) => { + taskpool.execute((): boolean => { + return this.sendSync(data); + }).then((content: Any) => { + resolve(content as boolean); + }, (err: Error): void => { + reject(err as BusinessError); + }); + }); + } + + native closeSync(options?: WebSocketCloseOptions): boolean; + + close(callback: AsyncCallback): void { + let p1 = taskpool.execute((): boolean => { + return this.closeSync(); + }) + p1.then((content: Any) => { + callback(new BusinessError(), content as boolean); + }, (err: Error): void => { + callback(err as BusinessError, false); + }); + } + + close(options: WebSocketCloseOptions, callback: AsyncCallback): void { + let p1 = taskpool.execute((): boolean => { + return this.closeSync(options); + }) + p1.then((content: Any) => { + callback(new BusinessError(), content as boolean); + }, (err: Error): void => { + callback(err as BusinessError, false); + }); + } + + close(options?: WebSocketCloseOptions): Promise { + return new Promise((resolve, reject) => { + taskpool.execute((): boolean => { + return this.closeSync(options); + }).then((content: Any) => { + resolve(content as boolean); + }, (err: Error): void => { + reject(err as BusinessError); + }); + }); + } + } +} diff --git a/frameworks/ets/ani/web_socket/ets/@ohos.net.webSocket.ets b/frameworks/ets/ani/web_socket/ets/@ohos.net.webSocket.ets index 6667d1f828dbcedd2a74e11cb68bcbb0007ac424..8302199225258b3398fd8c947d88223480f6d47f 100644 --- a/frameworks/ets/ani/web_socket/ets/@ohos.net.webSocket.ets +++ b/frameworks/ets/ani/web_socket/ets/@ohos.net.webSocket.ets @@ -107,7 +107,7 @@ export default namespace webSocket { status: int; message: string; } - + export type ResponseHeaders = Record; export interface WebSocket { @@ -160,7 +160,7 @@ export default namespace webSocket { let p1 = taskpool.execute((): boolean => { return this.connectSync(url); }) - p1.then((content: NullishType) => { + p1.then((content: Any) => { callback(new BusinessError(), content as boolean); }, (err: Error): void => { callback(err as BusinessError, false); @@ -171,7 +171,7 @@ export default namespace webSocket { let p1 = taskpool.execute((): boolean => { return this.connectSync(url, options); }) - p1.then((content: NullishType) => { + p1.then((content: Any) => { callback(new BusinessError(), content as boolean); }, (err: Error): void => { callback(err as BusinessError, false); @@ -182,7 +182,7 @@ export default namespace webSocket { return new Promise((resolve, reject) => { taskpool.execute((): boolean => { return this.connectSync(url, options); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as boolean); }, (err: Error): void => { reject(err as BusinessError); @@ -196,7 +196,7 @@ export default namespace webSocket { let p1 = taskpool.execute((): boolean => { return this.sendSync(data); }) - p1.then((content: NullishType) => { + p1.then((content: Any) => { callback(new BusinessError(), content as boolean); }, (err: Error): void => { callback(err as BusinessError, false); @@ -207,7 +207,7 @@ export default namespace webSocket { return new Promise((resolve, reject) => { taskpool.execute((): boolean => { return this.sendSync(data); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as boolean); }, (err: Error): void => { reject(err as BusinessError); @@ -221,7 +221,7 @@ export default namespace webSocket { let p1 = taskpool.execute((): boolean => { return this.closeSync(); }) - p1.then((content: NullishType) => { + p1.then((content: Any) => { callback(new BusinessError(), content as boolean); }, (err: Error): void => { callback(err as BusinessError, false); @@ -232,7 +232,7 @@ export default namespace webSocket { let p1 = taskpool.execute((): boolean => { return this.closeSync(options); }) - p1.then((content: NullishType) => { + p1.then((content: Any) => { callback(new BusinessError(), content as boolean); }, (err: Error): void => { callback(err as BusinessError, false); @@ -243,7 +243,7 @@ export default namespace webSocket { return new Promise((resolve, reject) => { taskpool.execute((): boolean => { return this.closeSync(options); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as boolean); }, (err: Error): void => { reject(err as BusinessError); @@ -289,7 +289,7 @@ export default namespace webSocket { this.offOpen() } else { this.offOpen(callback as AsyncCallback) - } + } } else if (type == 'message') { if (callback === undefined) { this.offMessage() @@ -445,7 +445,7 @@ export default namespace webSocket { return new Promise((resolve, reject) => { taskpool.execute((): boolean => { return this.startSync(config); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as boolean); }, (err: Error): void => { reject(err as BusinessError); @@ -459,7 +459,7 @@ export default namespace webSocket { return new Promise((resolve, reject) => { taskpool.execute((): boolean => { return this.closeSync(connection, options); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as boolean); }, (err: Error): void => { reject(err as BusinessError); @@ -479,7 +479,7 @@ export default namespace webSocket { return new Promise((resolve, reject) => { taskpool.execute((): boolean => { return this.sendSync(data, connection); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as boolean); }, (err: Error): void => { reject(err as BusinessError); @@ -493,7 +493,7 @@ export default namespace webSocket { return new Promise((resolve, reject) => { taskpool.execute((): boolean => { return this.stopSync(); - }).then((content: NullishType) => { + }).then((content: Any) => { resolve(content as boolean); }, (err: Error): void => { reject(err as BusinessError);