UNPKG

@gridgain/thin-client

Version:

NodeJS Client for Gridgain Community Edition

128 lines (111 loc) 4.49 kB
/* * Copyright 2019 GridGain Systems, Inc. and Contributors. * * Licensed under the GridGain Community Edition License (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.gridgain.com/products/software/community-edition/gridgain-community-edition-license * * 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. */ const FS = require('fs'); const IgniteClient = require('@gridgain/thin-client'); const ObjectType = IgniteClient.ObjectType; const ComplexObjectType = IgniteClient.ComplexObjectType; const BinaryObject = IgniteClient.BinaryObject; const CacheEntry = IgniteClient.CacheEntry; const ScanQuery = IgniteClient.ScanQuery; const IgniteClientConfiguration = IgniteClient.IgniteClientConfiguration; const ENDPOINT = 'localhost:10800'; const USER_NAME = 'ignite'; const PASSWORD = 'ignite'; const TLS_KEY_FILE_NAME = __dirname + '/certs/client.key'; const TLS_CERT_FILE_NAME = __dirname + '/certs/client.crt'; const TLS_CA_FILE_NAME = __dirname + '/certs/ca.crt'; const CACHE_NAME = 'AuthTlsExample_cache'; // This example demonstrates how to establish a secure connection to a GridGain node and use username/password authentication, // as well as basic Key-Value Queries operations for primitive types: // - connects to a node using TLS and providing username/password // - creates a cache, if it doesn't exist // - specifies key and value type of the cache // - put data of primitive types into the cache // - get data from the cache // - destroys the cache class AuthTlsExample { async start() { const igniteClient = new IgniteClient(this.onStateChanged.bind(this)); try { const connectionOptions = { 'key' : FS.readFileSync(TLS_KEY_FILE_NAME), 'cert' : FS.readFileSync(TLS_CERT_FILE_NAME), 'ca' : FS.readFileSync(TLS_CA_FILE_NAME) }; await igniteClient.connect(new IgniteClientConfiguration(ENDPOINT). setUserName(USER_NAME). setPassword(PASSWORD). setConnectionOptions(true, connectionOptions)); const cache = (await igniteClient.getOrCreateCache(CACHE_NAME)). setKeyType(ObjectType.PRIMITIVE_TYPE.INTEGER). setValueType(ObjectType.PRIMITIVE_TYPE.SHORT_ARRAY); await this.putGetData(cache); await igniteClient.destroyCache(CACHE_NAME); } catch (err) { console.log('ERROR: ' + err.message); } finally { igniteClient.disconnect(); } } async putGetData(cache) { let keys = [1, 2, 3]; let values = keys.map(key => this.generateValue(key)); // put multiple values in parallel await Promise.all([ await cache.put(keys[0], values[0]), await cache.put(keys[1], values[1]), await cache.put(keys[2], values[2]) ]); console.log('Cache values put successfully'); // get values sequentially let value; for (let i = 0; i < keys.length; i++) { value = await cache.get(keys[i]); if (!this.compareValues(value, values[i])) { console.log('Unexpected cache value!'); return; } } console.log('Cache values get successfully'); } compareValues(array1, array2) { return array1.length === array2.length && array1.every((value1, index) => value1 === array2[index]); } generateValue(key) { const length = key + 5; const result = new Array(length); for (let i = 0; i < length; i++) { result[i] = key * 10 + i; } return result; } onStateChanged(state, reason) { if (state === IgniteClient.STATE.CONNECTED) { console.log('Client is started'); } else if (state === IgniteClient.STATE.DISCONNECTED) { console.log('Client is stopped'); if (reason) { console.log(reason); } } } } const authTlsExample = new AuthTlsExample(); authTlsExample.start();