jspurefix 5.10.4 → 5.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ATDL_PLAN.md +82 -14
- package/dist/buffer/elastic-buffer.js +3 -3
- package/dist/buffer/elastic-buffer.js.map +1 -1
- package/jsfix.test_client.txt +62 -62
- package/jsfix.test_server.txt +72 -72
- package/package.json +1 -1
- package/src/buffer/elastic-buffer.ts +13 -3
package/ATDL_PLAN.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# FIXatdl renderer and end-to-end test harness
|
|
2
2
|
|
|
3
|
-
Design notes from 2026-08-08. Nothing is built yet. This
|
|
4
|
-
can start from the thinking rather than redo it.
|
|
3
|
+
Design notes from 2026-08-08, fixtures added 2026-08-09. Nothing is built yet. This
|
|
4
|
+
exists so the next session can start from the thinking rather than redo it.
|
|
5
5
|
|
|
6
|
-
**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
**Where this lives:** staying in jspurefix for now (decided 2026-08-09). It is not
|
|
7
|
+
engine work and will want its own repository once there is code, but the back-end half
|
|
8
|
+
is a jspurefix acceptor and there is no benefit to a second repository holding only a
|
|
9
|
+
markdown file.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ engine. Move it when the code starts.
|
|
|
15
15
|
A broker publishes a FIXatdl document per algorithm: an XML definition of its
|
|
16
16
|
parameters and the order ticket used to fill them in. An EMS — Bloomberg EMSX,
|
|
17
17
|
Flextrade, Portware, Fidessa, ITG Triton — renders the ticket from that document, and
|
|
18
|
-
the values map onto FIX tags
|
|
18
|
+
the values map onto FIX tags.
|
|
19
19
|
|
|
20
20
|
The observed pain, in more than one shop: getting a definition rendered is cobbled
|
|
21
21
|
together, and **you cannot tell whether a definition is sound until a vendor renders
|
|
@@ -98,12 +98,80 @@ is FIXML-shaped and is not a good fit for this.
|
|
|
98
98
|
|
|
99
99
|
~1,500 lines of interpreter, zero runtime dependencies.
|
|
100
100
|
|
|
101
|
+
## Fixtures
|
|
102
|
+
|
|
103
|
+
The expression engine is only as good as what it is tested against, and this is the
|
|
104
|
+
part most likely to be underestimated. Real broker documents vary enormously and most
|
|
105
|
+
are proprietary — the user has worked at a bank where every algo was defined in ATDL,
|
|
106
|
+
none of it publishable.
|
|
107
|
+
|
|
108
|
+
### routefire/rf-fix-atdl
|
|
109
|
+
|
|
110
|
+
`rf_strategies-v1.1.xml` — the first public fixture, 184 lines, 7 strategies (TWAP,
|
|
111
|
+
VWAP, PVOL, ISO, FAST, ULMT, RLMT).
|
|
112
|
+
|
|
113
|
+
What it settles:
|
|
114
|
+
|
|
115
|
+
- **Version is 1.1.** Namespaces are `.../FIXatdl-1-1/Core`, `/Validation`, `/Layout`,
|
|
116
|
+
`/Flow`, `/Timezones`. Target 1.1 and stop worrying about it.
|
|
117
|
+
- **Strategy identification is an attribute of `<Strategies>`:**
|
|
118
|
+
`strategyIdentifierTag="847"` and `versionIdentifierTag="7621"`, with each
|
|
119
|
+
`<Strategy>` carrying `wireValue`. So the algorithm is named on the wire in tag 847
|
|
120
|
+
and the parameters go elsewhere.
|
|
121
|
+
- **Parameters carry their own `fixTag`** — `126`, `168`, and customs `8001`–`8004`
|
|
122
|
+
here. This resolves the earlier open question about `NoStrategyParameters`: the
|
|
123
|
+
mapping is *data driven per parameter*, not a per-broker configuration switch. Build
|
|
124
|
+
it from the `fixTag` attribute; treat the strategy-parameters group as a second
|
|
125
|
+
mode for documents that omit `fixTag`, not as the default.
|
|
126
|
+
- Useful attributes in the wild: `use="required|optional"`, `minValue`/`maxValue`,
|
|
127
|
+
`localMktTz`, `initValue`, `initValueMode`, `increment`.
|
|
128
|
+
|
|
129
|
+
**What it does not exercise, which matters more.** This file is a skeleton — good for
|
|
130
|
+
proving the parser, nearly useless for proving the interpreter:
|
|
131
|
+
|
|
132
|
+
| | |
|
|
133
|
+
|---|---|
|
|
134
|
+
| `StateRule` | **none at all** — zero occurrences |
|
|
135
|
+
| Control types | only `Clock_t`, `SingleSpinner_t`, `TextField_t` |
|
|
136
|
+
| Parameter types | only `Float_t`, `Int_t`, `UTCTimestamp_t` |
|
|
137
|
+
| `EnumPair` | none — so no dropdowns, no radio groups, no checkboxes |
|
|
138
|
+
| Validation | two `val:StrategyEdit`, each a single `val:Edit`, operator `GT` only |
|
|
139
|
+
| `logicOperator` / `editRef` | none — no AND/OR, no reusable named edits |
|
|
140
|
+
| `flow:` | namespace declared, never used |
|
|
141
|
+
|
|
142
|
+
So it will not tell us whether the hard half is right. Enable/disable/visibility logic
|
|
143
|
+
is entirely absent, and validation never gets beyond one field-to-field comparison.
|
|
144
|
+
|
|
145
|
+
### What a representative fixture needs
|
|
146
|
+
|
|
147
|
+
Worth building by hand from experience rather than waiting to find one. Aim to cover:
|
|
148
|
+
|
|
149
|
+
- `StateRule` driving `enabled`, `visible` and value assignment, keyed off another
|
|
150
|
+
control's value
|
|
151
|
+
- a `StateRule` chain — B depends on A, C depends on B — to prove evaluation order and
|
|
152
|
+
catch cycles
|
|
153
|
+
- `DropDownList_t` and `RadioButtonList_t` with `EnumPair` (`wireValue` distinct from
|
|
154
|
+
`uiRep`, which is where renderers commonly go wrong)
|
|
155
|
+
- `CheckBox_t` and its `checkedEnumRef` / `uncheckedEnumRef`
|
|
156
|
+
- `val:Edit` with `logicOperator="AND"` / `"OR"` and nested edits
|
|
157
|
+
- `val:Edit` comparing against a literal `value=` as well as `field2=`
|
|
158
|
+
- a named `<val:Edit id="...">` referenced by `editRef`, since reuse is where scoping
|
|
159
|
+
bugs live
|
|
160
|
+
- `use="required"` interacting with a control that a `StateRule` has disabled — what
|
|
161
|
+
should validation do then? Real documents disagree, and vendors disagree with each
|
|
162
|
+
other
|
|
163
|
+
- a deliberately broken document, so the tool's error reporting is exercised too
|
|
164
|
+
|
|
101
165
|
## Open questions for next session
|
|
102
166
|
|
|
103
|
-
1. Own repository or a folder here
|
|
104
|
-
2. Which
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
167
|
+
1. ~~Own repository or a folder here?~~ Settled: stays here for now.
|
|
168
|
+
2. ~~Which FIXatdl version?~~ Settled: 1.1.
|
|
169
|
+
3. ~~How do parameters map onto the order?~~ Settled: per-parameter `fixTag`, with the
|
|
170
|
+
strategy-parameters group as a fallback mode.
|
|
171
|
+
4. Can any further public documents be found, or is the hand-built fixture above the
|
|
172
|
+
realistic path? The user has significant algo trading experience and can produce
|
|
173
|
+
something representative — that is likely to be worth more than another public file
|
|
174
|
+
of the routefire kind.
|
|
175
|
+
5. What does the harness do when a `StateRule` disables a `required` parameter? Decide
|
|
176
|
+
deliberately and document it, because it is the sort of thing that differs between
|
|
177
|
+
EMSs and is exactly what the tool exists to surface.
|
|
@@ -19,7 +19,7 @@ const mathjs_1 = require("mathjs");
|
|
|
19
19
|
const tsyringe_1 = require("tsyringe");
|
|
20
20
|
const di_tokens_1 = require("../runtime/di-tokens");
|
|
21
21
|
let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
|
|
22
|
-
constructor(size = 6 * 1024, returnTo =
|
|
22
|
+
constructor(size = 6 * 1024, returnTo = 64 * 1024) {
|
|
23
23
|
this.size = size;
|
|
24
24
|
this.returnTo = returnTo;
|
|
25
25
|
this.ptr = 0;
|
|
@@ -50,7 +50,7 @@ let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
|
|
|
50
50
|
}
|
|
51
51
|
setPos(ptr) {
|
|
52
52
|
const r = this.ptr;
|
|
53
|
-
if (ptr >= 0 && ptr <= this.
|
|
53
|
+
if (ptr >= 0 && ptr <= this.buffer.length) {
|
|
54
54
|
this.ptr = ptr;
|
|
55
55
|
}
|
|
56
56
|
return r;
|
|
@@ -130,7 +130,7 @@ let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
|
|
|
130
130
|
const shrink = this.stretched > this.returnTo;
|
|
131
131
|
if (shrink) {
|
|
132
132
|
this.buffer = Buffer.allocUnsafe(this.returnTo);
|
|
133
|
-
this.stretched = this.
|
|
133
|
+
this.stretched = this.returnTo;
|
|
134
134
|
}
|
|
135
135
|
return shrink;
|
|
136
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from './ascii/ascii-chars'\nimport { format } from 'mathjs'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../runtime/di-tokens'\n\n@injectable()\nexport class ElasticBuffer {\n private buffer: Buffer\n private ptr: number = 0\n private stretched: number\n\n constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,\n @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 6 * 1024) {\n this.size = Math.max(1, this.size)\n this.buffer = Buffer.allocUnsafe(this.size)\n this.returnTo = Math.max(this.size, this.returnTo)\n this.stretched = this.size\n }\n\n private static precisionRound (n: number, precision: number): number {\n const factor: number = Math.pow(10, precision)\n return Math.round(n * factor) / factor\n }\n\n private static HowManyDigits (v: number): number {\n v = Math.abs(v)\n let digits: number = 0\n let w: number = v\n while (w > 0) {\n ++digits\n w = Math.floor(w / 10)\n }\n return Math.max(digits, 1)\n }\n\n public currentSize (): number {\n return this.stretched\n }\n\n public getPos (): number {\n return this.ptr\n }\n\n public setPos (ptr: number): number {\n const r = this.ptr\n if (ptr >= 0 && ptr <= this.size) {\n this.ptr = ptr\n }\n return r\n }\n\n public get (pos: number): number {\n return this.buffer[pos]\n }\n\n public writeBoolean (v: boolean): number {\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\n return this.ptr\n }\n\n public switchChar (c: number): number {\n this.buffer[this.ptr - 1] = c\n return this.ptr\n }\n\n public saveChar (c: number): number {\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeChar (c: number): number {\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\n this.checkGrowBuffer(1)\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeString (s: string): number {\n const begin = this.ptr\n this.checkGrowBuffer(s.length)\n const buffer = this.buffer\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\n return this.ptr\n }\n\n public writeBuffer (v: Buffer): number {\n const begin = this.ptr\n this.checkGrowBuffer(v.length)\n const buffer = this.buffer\n const srcLen: number = v.length\n this.ptr += v.copy(buffer, begin, 0, srcLen)\n return this.ptr\n }\n\n public writeWholeNumber (n: number): number {\n const digits: number = ElasticBuffer.HowManyDigits(n)\n let reserve = digits\n const sign: number = Math.sign(n)\n let p: number = Math.pow(10, digits - 1)\n let v: number = Math.abs(n)\n if (sign < 0) {\n reserve++\n }\n this.checkGrowBuffer(reserve)\n const buffer = this.buffer\n if (sign < 0) {\n buffer[this.ptr++] = AsciiChars.Minus\n }\n while (p >= 1) {\n const d: number = Math.floor(v / p)\n v -= d * p\n p /= 10\n buffer[this.ptr++] = AsciiChars.Zero + d\n }\n\n return this.ptr\n }\n\n public writeNumber (v: number, places: number = 13): number {\n const rounded: number = Math.floor(v)\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\n if (fraction === 0) {\n // integer\n return this.writeWholeNumber(v)\n } else {\n // decimal with fraction turn to string\n const s: string = format(v, { notation: 'fixed' })\n return this.writeString(s)\n }\n }\n\n public reset (): boolean {\n this.ptr = 0\n const shrink = this.stretched > this.returnTo\n if (shrink) {\n this.buffer = Buffer.allocUnsafe(this.returnTo)\n this.stretched = this.size\n }\n return shrink\n }\n\n public slice (): Buffer {\n return this.buffer.subarray(0, this.ptr)\n }\n\n public copy (): Buffer {\n const m = Buffer.alloc(this.ptr)\n this.buffer.copy(m, 0, 0, this.ptr)\n return m\n }\n\n public clone (): ElasticBuffer {\n const cloned = new ElasticBuffer(this.ptr)\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\n cloned.setPos(this.ptr)\n return cloned\n }\n\n public writePaddedHundreds (v: number): number {\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(3)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n const tens: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = tens\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public writePaddedTensUnits (v: number): number {\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(2)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\n const saved: number = this.ptr\n this.ptr = ptr\n const buffer = this.buffer\n while (digits++ < padding) {\n buffer[this.ptr++] = AsciiChars.Zero\n }\n this.writeWholeNumber(numToWrite)\n this.ptr = saved\n }\n\n public toString (ptr: number = this.ptr): string {\n return this.buffer.toString('ascii', 0, ptr)\n }\n\n public checksum (ptr: number = this.ptr): number {\n const cks: number = this.sum(ptr)\n return cks % 256\n }\n\n public sum (ptr: number = this.ptr): number {\n let total: number = 0\n ptr = Math.min(ptr, this.ptr)\n const buffer = this.buffer\n for (let idx: number = 0; idx < ptr; idx++) {\n total += buffer[idx]\n }\n return total\n }\n\n public getWholeNumber (start: number, vend: number): number {\n const buffer = this.buffer\n let sign = 1\n let raised = vend - start\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n --raised\n sign = -1\n ++start\n break\n }\n case AsciiChars.Plus: {\n --raised\n ++start\n break\n }\n }\n let i: number = Math.pow(10, raised)\n let num: number = 0\n let scan: number = start\n\n while (scan <= vend) {\n const p: number = buffer[scan++]\n const d: number = p - AsciiChars.Zero\n num += d * i\n i /= 10\n }\n\n return num * sign\n }\n\n public getString (start: number, end: number): string {\n return this.buffer.toString('ascii', start, end)\n }\n\n public getBuffer (start: number, end: number): Buffer {\n return this.buffer.subarray(start, end)\n }\n\n public getBoolean (start: number): boolean {\n const b: number = this.buffer[start]\n return b === AsciiChars.Y\n }\n\n public getFloat (start: number, vend: number): number | null {\n let n: number = 0\n let digits: number = 0\n let dotPosition: number = 0\n const buffer = this.buffer\n let sign = 1\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n sign = -1\n start++\n break\n }\n case AsciiChars.Plus: {\n start++\n break\n }\n }\n const len = vend - start\n let i: number = Math.pow(10, len - 1)\n for (let j: number = start; j <= vend; ++j) {\n const p: number = buffer[j]\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\n const d: number = p - AsciiChars.Zero\n ++digits\n n += d * i\n i /= 10\n } else if (p === AsciiChars.Dot) {\n if (dotPosition > 0) {\n return null\n }\n dotPosition = j - start\n } else if (digits > 0) {\n return null\n }\n }\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\n const val = n * raised * sign\n return Math.round(val * round) / round\n }\n\n public checkGrowBuffer (required: number): void {\n let buffer = this.buffer\n let size = buffer.length\n const ptr = this.ptr\n if (size - ptr >= required) {\n return\n }\n while (size - ptr < required) {\n size *= 2\n }\n const old = buffer\n buffer = Buffer.allocUnsafe(size)\n old.copy(buffer, 0, 0, this.ptr)\n this.buffer = buffer\n this.stretched = size\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from './ascii/ascii-chars'\nimport { format } from 'mathjs'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../runtime/di-tokens'\n\n@injectable()\nexport class ElasticBuffer {\n private buffer: Buffer\n private ptr: number = 0\n private stretched: number\n\n /**\n * A buffer grown to serve a large message keeps that capacity across reset, so a\n * steady stream of similarly sized messages does not re-grow (and re-allocate) on\n * every single message. Only a buffer that has ballooned past returnTo is handed\n * back, so one pathological message cannot pin a large allocation for the life of\n * the session. Unlike cspurefix - where the discarded array goes to a shared\n * ArrayPool - the retained bytes are held by this instance, so an acceptor with\n * many connections holds up to this much per connection. Tune with\n * DITokens.elasticBufferReturnSize.\n */\n constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,\n @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 64 * 1024) {\n this.size = Math.max(1, this.size)\n this.buffer = Buffer.allocUnsafe(this.size)\n this.returnTo = Math.max(this.size, this.returnTo)\n this.stretched = this.size\n }\n\n private static precisionRound (n: number, precision: number): number {\n const factor: number = Math.pow(10, precision)\n return Math.round(n * factor) / factor\n }\n\n private static HowManyDigits (v: number): number {\n v = Math.abs(v)\n let digits: number = 0\n let w: number = v\n while (w > 0) {\n ++digits\n w = Math.floor(w / 10)\n }\n return Math.max(digits, 1)\n }\n\n public currentSize (): number {\n return this.stretched\n }\n\n public getPos (): number {\n return this.ptr\n }\n\n public setPos (ptr: number): number {\n const r = this.ptr\n if (ptr >= 0 && ptr <= this.buffer.length) {\n this.ptr = ptr\n }\n return r\n }\n\n public get (pos: number): number {\n return this.buffer[pos]\n }\n\n public writeBoolean (v: boolean): number {\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\n return this.ptr\n }\n\n public switchChar (c: number): number {\n this.buffer[this.ptr - 1] = c\n return this.ptr\n }\n\n public saveChar (c: number): number {\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeChar (c: number): number {\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\n this.checkGrowBuffer(1)\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeString (s: string): number {\n const begin = this.ptr\n this.checkGrowBuffer(s.length)\n const buffer = this.buffer\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\n return this.ptr\n }\n\n public writeBuffer (v: Buffer): number {\n const begin = this.ptr\n this.checkGrowBuffer(v.length)\n const buffer = this.buffer\n const srcLen: number = v.length\n this.ptr += v.copy(buffer, begin, 0, srcLen)\n return this.ptr\n }\n\n public writeWholeNumber (n: number): number {\n const digits: number = ElasticBuffer.HowManyDigits(n)\n let reserve = digits\n const sign: number = Math.sign(n)\n let p: number = Math.pow(10, digits - 1)\n let v: number = Math.abs(n)\n if (sign < 0) {\n reserve++\n }\n this.checkGrowBuffer(reserve)\n const buffer = this.buffer\n if (sign < 0) {\n buffer[this.ptr++] = AsciiChars.Minus\n }\n while (p >= 1) {\n const d: number = Math.floor(v / p)\n v -= d * p\n p /= 10\n buffer[this.ptr++] = AsciiChars.Zero + d\n }\n\n return this.ptr\n }\n\n public writeNumber (v: number, places: number = 13): number {\n const rounded: number = Math.floor(v)\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\n if (fraction === 0) {\n // integer\n return this.writeWholeNumber(v)\n } else {\n // decimal with fraction turn to string\n const s: string = format(v, { notation: 'fixed' })\n return this.writeString(s)\n }\n }\n\n public reset (): boolean {\n this.ptr = 0\n const shrink = this.stretched > this.returnTo\n if (shrink) {\n this.buffer = Buffer.allocUnsafe(this.returnTo)\n this.stretched = this.returnTo\n }\n return shrink\n }\n\n public slice (): Buffer {\n return this.buffer.subarray(0, this.ptr)\n }\n\n public copy (): Buffer {\n const m = Buffer.alloc(this.ptr)\n this.buffer.copy(m, 0, 0, this.ptr)\n return m\n }\n\n public clone (): ElasticBuffer {\n const cloned = new ElasticBuffer(this.ptr)\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\n cloned.setPos(this.ptr)\n return cloned\n }\n\n public writePaddedHundreds (v: number): number {\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(3)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n const tens: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = tens\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public writePaddedTensUnits (v: number): number {\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(2)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\n const saved: number = this.ptr\n this.ptr = ptr\n const buffer = this.buffer\n while (digits++ < padding) {\n buffer[this.ptr++] = AsciiChars.Zero\n }\n this.writeWholeNumber(numToWrite)\n this.ptr = saved\n }\n\n public toString (ptr: number = this.ptr): string {\n return this.buffer.toString('ascii', 0, ptr)\n }\n\n public checksum (ptr: number = this.ptr): number {\n const cks: number = this.sum(ptr)\n return cks % 256\n }\n\n public sum (ptr: number = this.ptr): number {\n let total: number = 0\n ptr = Math.min(ptr, this.ptr)\n const buffer = this.buffer\n for (let idx: number = 0; idx < ptr; idx++) {\n total += buffer[idx]\n }\n return total\n }\n\n public getWholeNumber (start: number, vend: number): number {\n const buffer = this.buffer\n let sign = 1\n let raised = vend - start\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n --raised\n sign = -1\n ++start\n break\n }\n case AsciiChars.Plus: {\n --raised\n ++start\n break\n }\n }\n let i: number = Math.pow(10, raised)\n let num: number = 0\n let scan: number = start\n\n while (scan <= vend) {\n const p: number = buffer[scan++]\n const d: number = p - AsciiChars.Zero\n num += d * i\n i /= 10\n }\n\n return num * sign\n }\n\n public getString (start: number, end: number): string {\n return this.buffer.toString('ascii', start, end)\n }\n\n public getBuffer (start: number, end: number): Buffer {\n return this.buffer.subarray(start, end)\n }\n\n public getBoolean (start: number): boolean {\n const b: number = this.buffer[start]\n return b === AsciiChars.Y\n }\n\n public getFloat (start: number, vend: number): number | null {\n let n: number = 0\n let digits: number = 0\n let dotPosition: number = 0\n const buffer = this.buffer\n let sign = 1\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n sign = -1\n start++\n break\n }\n case AsciiChars.Plus: {\n start++\n break\n }\n }\n const len = vend - start\n let i: number = Math.pow(10, len - 1)\n for (let j: number = start; j <= vend; ++j) {\n const p: number = buffer[j]\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\n const d: number = p - AsciiChars.Zero\n ++digits\n n += d * i\n i /= 10\n } else if (p === AsciiChars.Dot) {\n if (dotPosition > 0) {\n return null\n }\n dotPosition = j - start\n } else if (digits > 0) {\n return null\n }\n }\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\n const val = n * raised * sign\n return Math.round(val * round) / round\n }\n\n public checkGrowBuffer (required: number): void {\n let buffer = this.buffer\n let size = buffer.length\n const ptr = this.ptr\n if (size - ptr >= required) {\n return\n }\n while (size - ptr < required) {\n size *= 2\n }\n const old = buffer\n buffer = Buffer.allocUnsafe(size)\n old.copy(buffer, 0, 0, this.ptr)\n this.buffer = buffer\n this.stretched = size\n }\n}\n"]}
|
package/jsfix.test_client.txt
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
2
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
3
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
4
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
5
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
6
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
7
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
8
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
9
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
10
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
11
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
12
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
13
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
14
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
15
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
16
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
17
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
18
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
19
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
20
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
21
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
22
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
23
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=
|
|
24
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
25
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
26
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
27
|
-
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
28
|
-
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
29
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
30
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
31
|
-
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
32
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
33
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
34
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
35
|
-
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
36
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
37
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
38
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
39
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
40
|
-
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
41
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
42
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
43
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
44
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
45
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
46
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
47
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
48
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
49
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
50
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
51
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=
|
|
52
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
53
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
54
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
55
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
56
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
57
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
58
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
59
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
60
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
61
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
62
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
1
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:53.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=108|
|
|
2
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:53.862|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
3
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:53.863|7=1|16=1|10=240|
|
|
4
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:53.867|122=20260811-18:13:53.867|123=Y|36=2|10=119|
|
|
5
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:13:55.867|58=5|10=222|
|
|
6
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:58.684|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
|
|
7
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:58.686|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=161|
|
|
8
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:58.687|7=1|16=0|10=248|
|
|
9
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:58.690|122=20260811-18:13:58.690|123=Y|36=2|10=117|
|
|
10
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:00.690|58=5|10=207|
|
|
11
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.174|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
|
|
12
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
|
|
13
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=099|
|
|
14
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.718|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
|
|
15
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.719|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=149|
|
|
16
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:04.721|58=5|10=206|
|
|
17
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:05.177|58=5|10=213|
|
|
18
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:07.392|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
19
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:07.393|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
|
|
20
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:08.396|58=5|10=218|
|
|
21
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:11.141|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=089|
|
|
22
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:11.143|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=139|
|
|
23
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260811-18:14:12.143|58=5|10=201|
|
|
24
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:14.629|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
25
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:14.630|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
|
|
26
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:15.632|58=5|10=209|
|
|
27
|
+
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:18.100|98=0|141=Y|553=js-client|554=pwd-client|10=159|
|
|
28
|
+
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:18.101|45=1|372=A|373=1|58=msgType A missing required tag 108|10=249|
|
|
29
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:22.692|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
30
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:22.694|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
31
|
+
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:22.695|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=154|
|
|
32
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:24.696|58=5|10=220|
|
|
33
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:27.434|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
|
|
34
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:27.435|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
|
|
35
|
+
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:27.437|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=074|
|
|
36
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:29.438|58=5|10=219|
|
|
37
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:31.436|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
|
|
38
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:35.923|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
39
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:35.924|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
40
|
+
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:35.925|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=032|
|
|
41
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:37.925|58=5|10=219|
|
|
42
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:40.389|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=055|
|
|
43
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:40.390|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=145|
|
|
44
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:42.397|112=Tue, 11 Aug 2026 18:14:42 GMT|10=146|
|
|
45
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:44.400|112=Tue, 11 Aug 2026 18:14:44 GMT|10=136|
|
|
46
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:46.392|58=5|10=216|
|
|
47
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:48.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
48
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:48.858|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=112|
|
|
49
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:50.863|112=Tue, 11 Aug 2026 18:14:50 GMT|10=142|
|
|
50
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:52.867|112=Tue, 11 Aug 2026 18:14:52 GMT|10=151|
|
|
51
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260811-18:14:54.870|112=Tue, 11 Aug 2026 18:14:54 GMT|10=150|
|
|
52
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:56.861|58=5|10=221|
|
|
53
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:59.581|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=059|
|
|
54
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:59.582|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=111|
|
|
55
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:15:01.586|112=Tue, 11 Aug 2026 18:15:01 GMT|10=138|
|
|
56
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:15:03.589|112=Tue, 11 Aug 2026 18:15:03 GMT|10=146|
|
|
57
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:15:04.591|112=Tue, 11 Aug 2026 18:15:04 GMT|10=140|
|
|
58
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260811-18:15:05.591|112=Tue, 11 Aug 2026 18:15:05 GMT|10=144|
|
|
59
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:15:07.585|58=5|10=219|
|
|
60
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:17:13.977|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
|
|
61
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:17:13.985|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=158|
|
|
62
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:17:14.990|58=5|10=218|
|
package/jsfix.test_server.txt
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
2
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
3
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
4
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
5
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
6
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
7
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
8
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
9
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
10
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
11
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
12
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
13
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
14
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
15
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
16
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
17
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
18
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
19
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
20
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
21
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
22
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
23
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
24
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
25
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
26
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=
|
|
27
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
28
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
29
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
30
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
31
|
-
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
32
|
-
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
33
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
34
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
1
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:53.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=108|
|
|
2
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:53.862|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
3
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:53.863|7=1|16=1|10=240|
|
|
4
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:53.867|122=20260811-18:13:53.867|123=Y|36=2|10=119|
|
|
5
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:13:55.865|58=5|10=221|
|
|
6
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:13:55.867|58=5|10=222|
|
|
7
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:58.684|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
|
|
8
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:58.686|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=161|
|
|
9
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:58.687|7=1|16=0|10=248|
|
|
10
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:58.690|122=20260811-18:13:58.690|123=Y|36=2|10=117|
|
|
11
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:00.689|58=5|10=216|
|
|
12
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:00.690|58=5|10=207|
|
|
13
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.174|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
|
|
14
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
|
|
15
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=099|
|
|
16
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.718|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
|
|
17
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.719|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=149|
|
|
18
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:04.720|58=5|10=205|
|
|
19
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:04.721|58=5|10=206|
|
|
20
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:07.392|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
21
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:07.393|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
|
|
22
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:08.395|58=5|10=217|
|
|
23
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:08.396|58=5|10=218|
|
|
24
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:11.141|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=089|
|
|
25
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:11.143|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=139|
|
|
26
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260811-18:14:12.143|58=5|10=201|
|
|
27
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:14.629|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
28
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:14.630|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
|
|
29
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:15.632|58=5|10=209|
|
|
30
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:15.632|58=5|10=209|
|
|
31
|
+
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:18.100|98=0|141=Y|553=js-client|554=pwd-client|10=159|
|
|
32
|
+
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:18.101|45=1|372=A|373=1|58=msgType A missing required tag 108|10=249|
|
|
33
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:22.692|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
34
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:22.694|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
35
35
|
8=FIX4.4|9=0000136|35=ZZ|49=init-comp|56=accept-comp|34=2|57=fix|52=20180902-12:25:28.980|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=177|
|
|
36
|
-
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
37
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
38
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
39
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
40
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
36
|
+
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:22.695|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=154|
|
|
37
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:24.694|58=5|10=218|
|
|
38
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:24.696|58=5|10=220|
|
|
39
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:27.434|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
|
|
40
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:27.435|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
|
|
41
41
|
8=FIX4.4|9=0000123|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20180902-12:25:59.161|999=Sun, 02 Sep 2018 12:25:59 GMT|10=95|
|
|
42
|
-
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
43
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
44
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
45
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
46
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
42
|
+
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:27.437|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=074|
|
|
43
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:29.437|58=5|10=218|
|
|
44
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:29.438|58=5|10=219|
|
|
45
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:35.923|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
46
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:35.924|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
47
47
|
8=FIX4.4|9=0000123|35=0|49=init-not!|56=accept-comp|34=2|57=fix|52=20180902-12:25:59.161|112=Sun, 02 Sep 2018 12:25:59 GMT|10=95|
|
|
48
|
-
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
49
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
50
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
51
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
52
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
53
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
54
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
55
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
56
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
57
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
58
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
59
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
60
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
61
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=
|
|
62
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
63
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
64
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
65
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
66
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
67
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
68
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
69
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
70
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=
|
|
71
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
72
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
73
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
74
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
75
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
48
|
+
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:35.925|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=032|
|
|
49
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:37.924|58=5|10=218|
|
|
50
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:37.925|58=5|10=219|
|
|
51
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:40.389|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=055|
|
|
52
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:40.390|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=145|
|
|
53
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:42.397|112=Tue, 11 Aug 2026 18:14:42 GMT|10=146|
|
|
54
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:44.400|112=Tue, 11 Aug 2026 18:14:44 GMT|10=136|
|
|
55
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=20260811-18:14:46.391|58=5|10=217|
|
|
56
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:46.392|58=5|10=216|
|
|
57
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:48.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
|
|
58
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:48.858|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=112|
|
|
59
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:50.863|112=Tue, 11 Aug 2026 18:14:50 GMT|10=142|
|
|
60
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:52.867|112=Tue, 11 Aug 2026 18:14:52 GMT|10=151|
|
|
61
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260811-18:14:54.870|112=Tue, 11 Aug 2026 18:14:54 GMT|10=150|
|
|
62
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:56.860|58=5|10=217|
|
|
63
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:56.861|58=5|10=221|
|
|
64
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:59.581|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=059|
|
|
65
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:59.582|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=111|
|
|
66
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:15:01.586|112=Tue, 11 Aug 2026 18:15:01 GMT|10=138|
|
|
67
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:15:03.589|112=Tue, 11 Aug 2026 18:15:03 GMT|10=146|
|
|
68
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:15:04.591|112=Tue, 11 Aug 2026 18:15:04 GMT|10=140|
|
|
69
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260811-18:15:05.591|112=Tue, 11 Aug 2026 18:15:05 GMT|10=144|
|
|
70
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=20260811-18:15:07.584|58=5|10=220|
|
|
71
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:15:07.585|58=5|10=219|
|
|
72
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:17:13.977|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
|
|
73
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:17:13.985|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=158|
|
|
74
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:17:14.988|58=5|10=225|
|
|
75
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:17:14.990|58=5|10=218|
|
package/package.json
CHANGED
|
@@ -9,8 +9,18 @@ export class ElasticBuffer {
|
|
|
9
9
|
private ptr: number = 0
|
|
10
10
|
private stretched: number
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* A buffer grown to serve a large message keeps that capacity across reset, so a
|
|
14
|
+
* steady stream of similarly sized messages does not re-grow (and re-allocate) on
|
|
15
|
+
* every single message. Only a buffer that has ballooned past returnTo is handed
|
|
16
|
+
* back, so one pathological message cannot pin a large allocation for the life of
|
|
17
|
+
* the session. Unlike cspurefix - where the discarded array goes to a shared
|
|
18
|
+
* ArrayPool - the retained bytes are held by this instance, so an acceptor with
|
|
19
|
+
* many connections holds up to this much per connection. Tune with
|
|
20
|
+
* DITokens.elasticBufferReturnSize.
|
|
21
|
+
*/
|
|
12
22
|
constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,
|
|
13
|
-
@inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number =
|
|
23
|
+
@inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 64 * 1024) {
|
|
14
24
|
this.size = Math.max(1, this.size)
|
|
15
25
|
this.buffer = Buffer.allocUnsafe(this.size)
|
|
16
26
|
this.returnTo = Math.max(this.size, this.returnTo)
|
|
@@ -43,7 +53,7 @@ export class ElasticBuffer {
|
|
|
43
53
|
|
|
44
54
|
public setPos (ptr: number): number {
|
|
45
55
|
const r = this.ptr
|
|
46
|
-
if (ptr >= 0 && ptr <= this.
|
|
56
|
+
if (ptr >= 0 && ptr <= this.buffer.length) {
|
|
47
57
|
this.ptr = ptr
|
|
48
58
|
}
|
|
49
59
|
return r
|
|
@@ -134,7 +144,7 @@ export class ElasticBuffer {
|
|
|
134
144
|
const shrink = this.stretched > this.returnTo
|
|
135
145
|
if (shrink) {
|
|
136
146
|
this.buffer = Buffer.allocUnsafe(this.returnTo)
|
|
137
|
-
this.stretched = this.
|
|
147
|
+
this.stretched = this.returnTo
|
|
138
148
|
}
|
|
139
149
|
return shrink
|
|
140
150
|
}
|