something is working
This commit is contained in:
+76
@@ -0,0 +1,76 @@
|
||||
import type { Document } from '../bson';
|
||||
import { ServerType } from '../sdam/common';
|
||||
import { parseServerType } from '../sdam/server_description';
|
||||
import type { CompressorName } from './wire_protocol/compression';
|
||||
|
||||
const RESPONSE_FIELDS = [
|
||||
'minWireVersion',
|
||||
'maxWireVersion',
|
||||
'maxBsonObjectSize',
|
||||
'maxMessageSizeBytes',
|
||||
'maxWriteBatchSize',
|
||||
'logicalSessionTimeoutMinutes'
|
||||
] as const;
|
||||
|
||||
/** @public */
|
||||
export interface StreamDescriptionOptions {
|
||||
compressors?: CompressorName[];
|
||||
logicalSessionTimeoutMinutes?: number;
|
||||
loadBalanced: boolean;
|
||||
}
|
||||
|
||||
/** @public */
|
||||
export class StreamDescription {
|
||||
address: string;
|
||||
type: string;
|
||||
minWireVersion?: number;
|
||||
maxWireVersion?: number;
|
||||
maxBsonObjectSize: number;
|
||||
maxMessageSizeBytes: number;
|
||||
maxWriteBatchSize: number;
|
||||
compressors: CompressorName[];
|
||||
compressor?: CompressorName;
|
||||
logicalSessionTimeoutMinutes?: number;
|
||||
loadBalanced: boolean;
|
||||
|
||||
__nodejs_mock_server__?: boolean;
|
||||
|
||||
zlibCompressionLevel?: number;
|
||||
|
||||
constructor(address: string, options?: StreamDescriptionOptions) {
|
||||
this.address = address;
|
||||
this.type = ServerType.Unknown;
|
||||
this.minWireVersion = undefined;
|
||||
this.maxWireVersion = undefined;
|
||||
this.maxBsonObjectSize = 16777216;
|
||||
this.maxMessageSizeBytes = 48000000;
|
||||
this.maxWriteBatchSize = 100000;
|
||||
this.logicalSessionTimeoutMinutes = options?.logicalSessionTimeoutMinutes;
|
||||
this.loadBalanced = !!options?.loadBalanced;
|
||||
this.compressors =
|
||||
options && options.compressors && Array.isArray(options.compressors)
|
||||
? options.compressors
|
||||
: [];
|
||||
}
|
||||
|
||||
receiveResponse(response: Document | null): void {
|
||||
if (response == null) {
|
||||
return;
|
||||
}
|
||||
this.type = parseServerType(response);
|
||||
for (const field of RESPONSE_FIELDS) {
|
||||
if (response[field] != null) {
|
||||
this[field] = response[field];
|
||||
}
|
||||
|
||||
// testing case
|
||||
if ('__nodejs_mock_server__' in response) {
|
||||
this.__nodejs_mock_server__ = response['__nodejs_mock_server__'];
|
||||
}
|
||||
}
|
||||
|
||||
if (response.compression) {
|
||||
this.compressor = this.compressors.filter(c => response.compression?.includes(c))[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user