@iotize/tap
Version:
IoTize Device client for Javascript
171 lines • 11.2 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { QueueComProtocol } from '@iotize/tap/protocol/core';
import { of, Subject } from 'rxjs';
import { delay, first } from 'rxjs/operators';
import { debug } from '../debug';
import { MockRouter } from './mock-router';
const TAG = 'MockProtocol';
export function createMockProtocol() {
return new MockProtocol();
}
/**
*
* <p>
* This is a mock com protocol for testing only
* <p>
* We can simulate iotize response according to the request message
*/
export class MockProtocol extends QueueComProtocol {
constructor() {
super();
this.mockOptions = {
connect: {
delay: 100,
},
disconnect: {
delay: 100,
},
write: {
delay: 1,
},
};
this.input = new Subject();
this.output = new Subject();
this._router = new MockRouter();
// this.connectDelay = 2000;
// this.disconnectDelay = 2000;
// this.callback = callback;
// this.lastReceivedData = new Uint8Array(0);
// this.configuration = new Configuration();
// this.configuration.connectionTimeoutMillis = 3000;
// this.configuration.sendTimeoutMillis = 3000;
}
static MIRROR() {
const mockProtocol = new MockProtocol();
mockProtocol.input.subscribe((input) => {
mockProtocol.setOutputData(input);
});
// mockProtocol.router.addRoute(
// (command: Uint8Array) => {
// return true;
// },
// (request: Uint8Array) => {
// return request;
// }
// );
return mockProtocol;
}
// /**
// * Create a new instance from roote mapping
// */
// public static createFromRoutes(map: RouteMapping): MockProtocol {
// const mockProtocol = new MockProtocol();
// mockProtocol.router.addRoutes(map);
// return mockProtocol;
// }
// public get router(): MockRouter {
// return this._router;
// }
setConnectionState(connectionState) {
debug(TAG, `setConnectionState: ${connectionState}`);
this.connectionState = connectionState;
return this;
}
setConnectDelay(connectDelay) {
this.mockOptions.connect.delay = connectDelay;
return this;
}
getDisconnectDelay() {
return this.mockOptions.disconnect.delay;
}
setDisconnectDelay(disconnectDelay) {
this.mockOptions.disconnect.delay = disconnectDelay;
return this;
}
setOutputData(inputData) {
this.lastTranseiveData = inputData;
this.output.next(inputData);
}
setInputData(outputData) {
this.lastReceivedData = outputData;
this.input.next(outputData);
}
setCallback(callback) {
this.callback = callback;
}
_connect(options) {
return of(undefined).pipe(delay(this.mockOptions.connect.delay));
}
_disconnect(options) {
return of(undefined).pipe(delay(this.mockOptions.disconnect.delay));
}
write(request) {
return __awaiter(this, void 0, void 0, function* () {
try {
if (this.callback) {
yield this.callback.beforeWrite(request);
}
// this.lastReceivedData = request;
// const response = this.router.findRoute(request);
// if (!response) {
// throw new Error(`Not route for request ${bufferToHexString(request)}`)
// }
// debug(
// TAG,
// 'MockProtocol',
// 'Mocking response for ' + request + ' => ' + response
// );
// var result = this.responseEncoder.encode(response);
this.setInputData(request);
if (this.callback) {
yield this.callback.afterWrite(request);
}
return new Promise((resolve) => setTimeout(resolve, this.mockOptions.write.delay));
}
catch (err) {
return new Promise((resolve, reject) => setTimeout(() => reject(err), this.mockOptions.write.delay));
}
});
}
read() {
try {
if (this.callback) {
this.callback.beforeRead();
}
return this.output
.pipe(first())
.toPromise()
.then((v) => (v ? v : new Uint8Array()));
// while (!this.hasNewData()) {
// // TODO wait ??
// }
// if (this.lastTranseiveData) {
// const result = of(this.lastTranseiveData);
// if (this.callback) {
// this.callback.afterRead(result);
// }
// return result.toPromise();
// } else {
// return Promise.reject(new Error('Read timeout'));
// }
}
catch (err) {
return Promise.reject(err);
}
}
}
// public addOnRequestListener() {
// this.mOnRequestListener =
// }
// public interface onRequestListener{
// onRequest(RequestMessage request);
// }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1wcm90b2NvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3Rpbmcvc3JjL21vY2svbW9jay1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFLQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUM7QUFnQjNCLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFVRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLGdCQUFnQjtJQXFCaEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQW5CVixnQkFBVyxHQUFHO1lBQ1osT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxHQUFHO2FBQ1g7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFLEdBQUc7YUFDWDtZQUNELEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsQ0FBQzthQUNUO1NBQ0YsQ0FBQztRQUVGLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBT2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyw0QkFBNEI7UUFDNUIsK0JBQStCO1FBQy9CLDRCQUE0QjtRQUM1Qiw2Q0FBNkM7UUFDN0MsNENBQTRDO1FBQzVDLHFEQUFxRDtR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