Skip to content

Commit 8b26155

Browse files
authored
Merge pull request #140 from GhostInAMachine/Ringbuffer
Ringbuffer
2 parents 211161d + 3947718 commit 8b26155

18 files changed

+798
-2
lines changed

src/HazelcastClient.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {IQueue} from './proxy/IQueue';
1919
import {IList} from './proxy/IList';
2020
import {ILock} from './proxy/ILock';
2121
import {MultiMap} from './proxy/MultiMap';
22+
import {IRingbuffer} from './proxy/IRingbuffer';
2223

2324
export default class HazelcastClient {
2425

@@ -156,6 +157,15 @@ export default class HazelcastClient {
156157
return <MultiMap<K, V>>this.proxyManager.getOrCreateProxy(name, this.proxyManager.MULTIMAP_SERVICE);
157158
}
158159

160+
/**
161+
* Returns a distributed ringbuffer instance with the given name.
162+
* @param name
163+
* @returns {IRingbuffer<E>}
164+
*/
165+
getRingbuffer<E>(name: string): IRingbuffer<E> {
166+
return <IRingbuffer<E>>this.proxyManager.getOrCreateProxy(name, this.proxyManager.RINGBUFFER_SERVICE);
167+
}
168+
159169

160170
/**
161171
* Return configuration that this instance started with.

src/codec/RingbufferAddAllCodec.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/* tslint:disable */
2+
import ClientMessage = require('../ClientMessage');
3+
import {BitsUtil} from '../BitsUtil';
4+
import {Data} from '../serialization/Data';
5+
import {RingbufferMessageType} from './RingbufferMessageType';
6+
import Address = require('../Address');
7+
import DistributedObjectInfoCodec = require('./DistributedObjectInfoCodec');
8+
9+
var REQUEST_TYPE = RingbufferMessageType.RINGBUFFER_ADDALL;
10+
var RESPONSE_TYPE = 103;
11+
var RETRYABLE = false;
12+
13+
14+
export class RingbufferAddAllCodec {
15+
16+
17+
static calculateSize(name: string, valueList: any, overflowPolicy: number) {
18+
// Calculates the request payload size
19+
var dataSize: number = 0;
20+
dataSize += BitsUtil.calculateSizeString(name);
21+
dataSize += BitsUtil.INT_SIZE_IN_BYTES;
22+
23+
valueList.forEach((valueListItem: any) => {
24+
dataSize += BitsUtil.calculateSizeData(valueListItem);
25+
});
26+
dataSize += BitsUtil.INT_SIZE_IN_BYTES;
27+
return dataSize;
28+
}
29+
30+
static encodeRequest(name: string, valueList: any, overflowPolicy: number) {
31+
// Encode request into clientMessage
32+
var clientMessage = ClientMessage.newClientMessage(this.calculateSize(name, valueList, overflowPolicy));
33+
clientMessage.setMessageType(REQUEST_TYPE);
34+
clientMessage.setRetryable(RETRYABLE);
35+
clientMessage.appendString(name);
36+
clientMessage.appendInt32(valueList.length);
37+
38+
valueList.forEach((valueListItem: any) => {
39+
clientMessage.appendData(valueListItem);
40+
});
41+
42+
clientMessage.appendInt32(overflowPolicy);
43+
clientMessage.updateFrameLength();
44+
return clientMessage;
45+
}
46+
47+
static decodeResponse(clientMessage: ClientMessage, toObjectFunction: (data: Data) => any = null) {
48+
// Decode response from client message
49+
var parameters: any = {'response': null};
50+
parameters['response'] = clientMessage.readLong();
51+
return parameters;
52+
53+
}
54+
55+
56+
}

src/codec/RingbufferAddCodec.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/* tslint:disable */
2+
import ClientMessage = require('../ClientMessage');
3+
import {BitsUtil} from '../BitsUtil';
4+
import {Data} from '../serialization/Data';
5+
import {RingbufferMessageType} from './RingbufferMessageType';
6+
import Address = require('../Address');
7+
import DistributedObjectInfoCodec = require('./DistributedObjectInfoCodec');
8+
9+
var REQUEST_TYPE = RingbufferMessageType.RINGBUFFER_ADD;
10+
var RESPONSE_TYPE = 103;
11+
var RETRYABLE = false;
12+
13+
14+
export class RingbufferAddCodec {
15+
16+
17+
static calculateSize(name: string, overflowPolicy: number, value: Data) {
18+
// Calculates the request payload size
19+
var dataSize: number = 0;
20+
dataSize += BitsUtil.calculateSizeString(name);
21+
dataSize += BitsUtil.INT_SIZE_IN_BYTES;
22+
dataSize += BitsUtil.calculateSizeData(value);
23+
return dataSize;
24+
}
25+
26+
static encodeRequest(name: string, overflowPolicy: number, value: Data) {
27+
// Encode request into clientMessage
28+
var clientMessage = ClientMessage.newClientMessage(this.calculateSize(name, overflowPolicy, value));
29+
clientMessage.setMessageType(REQUEST_TYPE);
30+
clientMessage.setRetryable(RETRYABLE);
31+
clientMessage.appendString(name);
32+
clientMessage.appendInt32(overflowPolicy);
33+
clientMessage.appendData(value);
34+
clientMessage.updateFrameLength();
35+
return clientMessage;
36+
}
37+
38+
static decodeResponse(clientMessage: ClientMessage, toObjectFunction: (data: Data) => any = null) {
39+
// Decode response from client message
40+
var parameters: any = {'response': null};
41+
parameters['response'] = clientMessage.readLong();
42+
return parameters;
43+
44+
}
45+
46+
47+
}

src/codec/RingbufferCapacityCodec.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/* tslint:disable */
2+
import ClientMessage = require('../ClientMessage');
3+
import {BitsUtil} from '../BitsUtil';
4+
import {Data} from '../serialization/Data';
5+
import {RingbufferMessageType} from './RingbufferMessageType';
6+
import Address = require('../Address');
7+
import DistributedObjectInfoCodec = require('./DistributedObjectInfoCodec');
8+
9+
var REQUEST_TYPE = RingbufferMessageType.RINGBUFFER_CAPACITY;
10+
var RESPONSE_TYPE = 103;
11+
var RETRYABLE = false;
12+
13+
14+
export class RingbufferCapacityCodec {
15+
16+
17+
static calculateSize(name: string) {
18+
// Calculates the request payload size
19+
var dataSize: number = 0;
20+
dataSize += BitsUtil.calculateSizeString(name);
21+
return dataSize;
22+
}
23+
24+
static encodeRequest(name: string) {
25+
// Encode request into clientMessage
26+
var clientMessage = ClientMessage.newClientMessage(this.calculateSize(name));
27+
clientMessage.setMessageType(REQUEST_TYPE);
28+
clientMessage.setRetryable(RETRYABLE);
29+
clientMessage.appendString(name);
30+
clientMessage.updateFrameLength();
31+
return clientMessage;
32+
}
33+
34+
static decodeResponse(clientMessage: ClientMessage, toObjectFunction: (data: Data) => any = null) {
35+
// Decode response from client message
36+
var parameters: any = {'response': null};
37+
parameters['response'] = clientMessage.readLong();
38+
return parameters;
39+
40+
}
41+
42+
43+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/* tslint:disable */
2+
import ClientMessage = require('../ClientMessage');
3+
import {BitsUtil} from '../BitsUtil';
4+
import {Data} from '../serialization/Data';
5+
import {RingbufferMessageType} from './RingbufferMessageType';
6+
import Address = require('../Address');
7+
import DistributedObjectInfoCodec = require('./DistributedObjectInfoCodec');
8+
9+
var REQUEST_TYPE = RingbufferMessageType.RINGBUFFER_HEADSEQUENCE;
10+
var RESPONSE_TYPE = 103;
11+
var RETRYABLE = false;
12+
13+
14+
export class RingbufferHeadSequenceCodec {
15+
16+
17+
static calculateSize(name: string) {
18+
// Calculates the request payload size
19+
var dataSize: number = 0;
20+
dataSize += BitsUtil.calculateSizeString(name);
21+
return dataSize;
22+
}
23+
24+
static encodeRequest(name: string) {
25+
// Encode request into clientMessage
26+
var clientMessage = ClientMessage.newClientMessage(this.calculateSize(name));
27+
clientMessage.setMessageType(REQUEST_TYPE);
28+
clientMessage.setRetryable(RETRYABLE);
29+
clientMessage.appendString(name);
30+
clientMessage.updateFrameLength();
31+
return clientMessage;
32+
}
33+
34+
static decodeResponse(clientMessage: ClientMessage, toObjectFunction: (data: Data) => any = null) {
35+
// Decode response from client message
36+
var parameters: any = {'response': null};
37+
parameters['response'] = clientMessage.readLong();
38+
return parameters;
39+
40+
}
41+
42+
43+
}

src/codec/RingbufferMessageType.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/* tslint:disable */
2+
export class RingbufferMessageType {
3+
static RINGBUFFER_SIZE = 0x1901;
4+
static RINGBUFFER_TAILSEQUENCE = 0x1902;
5+
static RINGBUFFER_HEADSEQUENCE = 0x1903;
6+
static RINGBUFFER_CAPACITY = 0x1904;
7+
static RINGBUFFER_REMAININGCAPACITY = 0x1905;
8+
static RINGBUFFER_ADD = 0x1906;
9+
static RINGBUFFER_READONE = 0x1908;
10+
static RINGBUFFER_ADDALL = 0x1909;
11+
static RINGBUFFER_READMANY = 0x190a;
12+
}

src/codec/RingbufferReadManyCodec.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/* tslint:disable */
2+
import ClientMessage = require('../ClientMessage');
3+
import {BitsUtil} from '../BitsUtil';
4+
import {Data} from '../serialization/Data';
5+
import {RingbufferMessageType} from './RingbufferMessageType';
6+
import Address = require('../Address');
7+
import DistributedObjectInfoCodec = require('./DistributedObjectInfoCodec');
8+
9+
var REQUEST_TYPE = RingbufferMessageType.RINGBUFFER_READMANY;
10+
var RESPONSE_TYPE = 115;
11+
var RETRYABLE = false;
12+
13+
14+
export class RingbufferReadManyCodec {
15+
16+
17+
static calculateSize(name: string, startSequence: any, minCount: number, maxCount: number, filter: Data) {
18+
// Calculates the request payload size
19+
var dataSize: number = 0;
20+
dataSize += BitsUtil.calculateSizeString(name);
21+
dataSize += BitsUtil.LONG_SIZE_IN_BYTES;
22+
dataSize += BitsUtil.INT_SIZE_IN_BYTES;
23+
dataSize += BitsUtil.INT_SIZE_IN_BYTES;
24+
dataSize += BitsUtil.BOOLEAN_SIZE_IN_BYTES;
25+
if (filter !== null) {
26+
dataSize += BitsUtil.calculateSizeData(filter);
27+
}
28+
return dataSize;
29+
}
30+
31+
static encodeRequest(name: string, startSequence: any, minCount: number, maxCount: number, filter: Data) {
32+
// Encode request into clientMessage
33+
var clientMessage = ClientMessage.newClientMessage(this.calculateSize(name, startSequence, minCount, maxCount, filter));
34+
clientMessage.setMessageType(REQUEST_TYPE);
35+
clientMessage.setRetryable(RETRYABLE);
36+
clientMessage.appendString(name);
37+
clientMessage.appendLong(startSequence);
38+
clientMessage.appendInt32(minCount);
39+
clientMessage.appendInt32(maxCount);
40+
clientMessage.appendBoolean(filter === null);
41+
if (filter !== null) {
42+
clientMessage.appendData(filter);
43+
}
44+
clientMessage.updateFrameLength();
45+
return clientMessage;
46+
}
47+
48+
static decodeResponse(clientMessage: ClientMessage, toObjectFunction: (data: Data) => any = null) {
49+
// Decode response from client message
50+
var parameters: any = {'readCount': null, 'items': null};
51+
parameters['readCount'] = clientMessage.readInt32();
52+
var itemsSize = clientMessage.readInt32();
53+
var items: any = [];
54+
for (var itemsIndex = 0; itemsIndex < itemsSize; itemsIndex++) {
55+
var itemsItem: Data;
56+
itemsItem = clientMessage.readData();
57+
items.push(itemsItem)
58+
}
59+
parameters['items'] = items;
60+
return parameters;
61+
}
62+
63+
64+
}

src/codec/RingbufferReadOneCodec.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/* tslint:disable */
2+
import ClientMessage = require('../ClientMessage');
3+
import {BitsUtil} from '../BitsUtil';
4+
import {Data} from '../serialization/Data';
5+
import {RingbufferMessageType} from './RingbufferMessageType';
6+
import Address = require('../Address');
7+
import DistributedObjectInfoCodec = require('./DistributedObjectInfoCodec');
8+
9+
var REQUEST_TYPE = RingbufferMessageType.RINGBUFFER_READONE;
10+
var RESPONSE_TYPE = 105;
11+
var RETRYABLE = false;
12+
13+
14+
export class RingbufferReadOneCodec {
15+
16+
17+
static calculateSize(name: string, sequence: any) {
18+
// Calculates the request payload size
19+
var dataSize: number = 0;
20+
dataSize += BitsUtil.calculateSizeString(name);
21+
dataSize += BitsUtil.LONG_SIZE_IN_BYTES;
22+
return dataSize;
23+
}
24+
25+
static encodeRequest(name: string, sequence: any) {
26+
// Encode request into clientMessage
27+
var clientMessage = ClientMessage.newClientMessage(this.calculateSize(name, sequence));
28+
clientMessage.setMessageType(REQUEST_TYPE);
29+
clientMessage.setRetryable(RETRYABLE);
30+
clientMessage.appendString(name);
31+
clientMessage.appendLong(sequence);
32+
clientMessage.updateFrameLength();
33+
return clientMessage;
34+
}
35+
36+
static decodeResponse(clientMessage: ClientMessage, toObjectFunction: (data: Data) => any = null) {
37+
// Decode response from client message
38+
var parameters: any = {'response': null};
39+
40+
if (clientMessage.readBoolean() !== true) {
41+
parameters['response'] = toObjectFunction(clientMessage.readData());
42+
}
43+
return parameters;
44+
45+
}
46+
47+
48+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/* tslint:disable */
2+
import ClientMessage = require('../ClientMessage');
3+
import {BitsUtil} from '../BitsUtil';
4+
import {Data} from '../serialization/Data';
5+
import {RingbufferMessageType} from './RingbufferMessageType';
6+
import Address = require('../Address');
7+
import DistributedObjectInfoCodec = require('./DistributedObjectInfoCodec');
8+
9+
var REQUEST_TYPE = RingbufferMessageType.RINGBUFFER_REMAININGCAPACITY;
10+
var RESPONSE_TYPE = 103;
11+
var RETRYABLE = false;
12+
13+
14+
export class RingbufferRemainingCapacityCodec {
15+
16+
17+
static calculateSize(name: string) {
18+
// Calculates the request payload size
19+
var dataSize: number = 0;
20+
dataSize += BitsUtil.calculateSizeString(name);
21+
return dataSize;
22+
}
23+
24+
static encodeRequest(name: string) {
25+
// Encode request into clientMessage
26+
var clientMessage = ClientMessage.newClientMessage(this.calculateSize(name));
27+
clientMessage.setMessageType(REQUEST_TYPE);
28+
clientMessage.setRetryable(RETRYABLE);
29+
clientMessage.appendString(name);
30+
clientMessage.updateFrameLength();
31+
return clientMessage;
32+
}
33+
34+
static decodeResponse(clientMessage: ClientMessage, toObjectFunction: (data: Data) => any = null) {
35+
// Decode response from client message
36+
var parameters: any = {'response': null};
37+
parameters['response'] = clientMessage.readLong();
38+
return parameters;
39+
40+
}
41+
42+
43+
}

0 commit comments

Comments
 (0)