Skip to content

Commit 08ceedd

Browse files
committed
Modularized MLLP server to be used in DRE
1 parent 7b44336 commit 08ceedd

File tree

4 files changed

+88
-50
lines changed

4 files changed

+88
-50
lines changed

README.md

+15-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,18 @@
66

77
* http://www.hl7standards.com/blog/2007/05/02/hl7-mlp-minimum-layer-protocol-defined/
88
* http://www.hl7standards.com/blog/2007/02/01/ack-message-original-mode-acknowledgement/
9-
9+
10+
11+
== Usage ==
12+
13+
see example.js
14+
15+
```javascript
16+
var mllp=require('./index.js');
17+
18+
var server = new mllp.MLLPServer();
19+
20+
server.on('hl7', function(data){
21+
console.log("just an example", data);
22+
});
23+
```

example.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var mllp=require('./index.js');
2+
3+
var server = new mllp.MLLPServer();
4+
5+
server.on('hl7', function(data){
6+
console.log("just an example", data);
7+
});

index.js

+64-47
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,78 @@
11
var net = require('net');
22
var hl7 = require('../hl7/index.js');
3-
4-
var HOST = '127.0.0.1';
5-
var PORT = 6969;
6-
3+
var util = require('util');
4+
var EventEmitter = require('events').EventEmitter;
75

86
//The header is a vertical tab character <VT> its hex value is 0x0b.
97
//The trailer is a field separator character <FS> (hex 0x1c) immediately followed by a carriage return <CR> (hex 0x0d)
108

11-
var VT=String.fromCharCode(0x0b);
12-
var FS=String.fromCharCode(0x1c);
13-
var CR=String.fromCharCode(0x0d);
9+
var VT = String.fromCharCode(0x0b);
10+
var FS = String.fromCharCode(0x1c);
11+
var CR = String.fromCharCode(0x0d);
1412

1513

16-
function ackn(data, ack_type){
17-
//get message ID
18-
var msg_id = data[0][10];
1914

20-
var header = [data[0]];
21-
22-
//switch around sender/receiver names
23-
header[0][3]=data[0][5];
24-
header[0][4]=data[0][6];
25-
header[0][5]=data[0][3];
26-
header[0][6]=data[0][4];
2715

28-
var result=hl7.serializeJSON(header);
29-
result=result+"\r"+"MSA|"+ack_type+"|"+msg_id;
30-
31-
return result;
32-
}
16+
function MLLPServer(host, port) {
3317

34-
net.createServer(function(sock) {
35-
36-
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
37-
38-
sock.on('data', function(data) {
39-
data=data.toString();
40-
//strip separators
41-
data=data.substring(1,data.length-3);
42-
var data2=hl7.parseString(data);
43-
44-
var ack = ackn(data2, "AA");
45-
46-
console.log("DATA:\nfrom " + sock.remoteAddress + ':\n' + data.split("\r").join("\n"));
47-
console.log();
48-
49-
sock.write(VT+ack+FS+CR);
50-
console.log("ACK:\n"+ ack.split("\r").join("\n"));
51-
console.log();
52-
53-
});
18+
var self = this;
19+
20+
var HOST = host || '127.0.0.1';
21+
var PORT = port || 6969;
22+
23+
var Server = net.createServer(function(sock) {
24+
25+
console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);
26+
27+
28+
function ackn(data, ack_type) {
29+
//get message ID
30+
var msg_id = data[0][10];
31+
32+
var header = [data[0]];
33+
34+
//switch around sender/receiver names
35+
header[0][3] = data[0][5];
36+
header[0][4] = data[0][6];
37+
header[0][5] = data[0][3];
38+
header[0][6] = data[0][4];
39+
40+
var result = hl7.serializeJSON(header);
41+
result = result + "\r" + "MSA|" + ack_type + "|" + msg_id;
42+
43+
return result;
44+
}
45+
46+
sock.on('data', function(data) {
47+
data = data.toString();
48+
//strip separators
49+
data = data.substring(1, data.length - 3);
50+
var data2 = hl7.parseString(data);
51+
52+
self.emit('hl7', data2);
53+
54+
var ack = ackn(data2, "AA");
55+
56+
console.log("DATA:\nfrom " + sock.remoteAddress + ':\n' + data.split("\r").join("\n"));
57+
console.log();
58+
59+
sock.write(VT + ack + FS + CR);
60+
console.log("ACK:\n" + ack.split("\r").join("\n"));
61+
console.log();
62+
63+
});
64+
65+
sock.on('close', function(data) {
66+
console.log('CLOSED: ' + sock.remoteAddress + ' ' + sock.remotePort);
67+
});
5468

55-
sock.on('close', function(data) {
56-
console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
5769
});
58-
59-
}).listen(PORT, HOST);
6070

61-
console.log('Server listening on ' + HOST +':'+ PORT);
71+
72+
Server.listen(PORT, HOST);
73+
74+
}
75+
76+
util.inherits(MLLPServer, EventEmitter);
77+
78+
exports.MLLPServer = MLLPServer;

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"name": "mllp",
3-
"version": "0.0.0",
2+
"name": "mllp-node",
3+
"version": "0.0.1",
44
"description": "MLLP (HL7) implementation in Node.js",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)