jspos
Version:
JavaScript ISO8583 ,JavaScript version of JPOS
225 lines (188 loc) • 9.79 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _ISOUtil = require('./ISOUtil');
var _ISOUtil2 = _interopRequireDefault(_ISOUtil);
var _ISOComponent2 = require('./ISOComponent');
var _ISOComponent3 = _interopRequireDefault(_ISOComponent2);
var _ISOField = require('./ISOField');
var _ISOField2 = _interopRequireDefault(_ISOField);
var _ISOHeader = require('./ISOHeader');
var _ISOHeader2 = _interopRequireDefault(_ISOHeader);
var _ISOBasePackager = require('./ISOBasePackager');
var _ISOBasePackager2 = _interopRequireDefault(_ISOBasePackager);
var _ISOBinaryFieldPackager = require('./packer/ISOBinaryFieldPackager');
var _ISOBinaryFieldPackager2 = _interopRequireDefault(_ISOBinaryFieldPackager);
var _ISOBinaryField = require('./ISOBinaryField');
var _ISOBinaryField2 = _interopRequireDefault(_ISOBinaryField);
var _BitSet = require('jsdk/util/BitSet');
var _BitSet2 = _interopRequireDefault(_BitSet);
var _ISOBitMap = require('./ISOBitMap');
var _ISOBitMap2 = _interopRequireDefault(_ISOBitMap);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
* ISO Msg
* @author Sean sean.snow@live.com
* @date 2015/12/22
*/
var ISOMsg = function (_ISOComponent) {
_inherits(ISOMsg, _ISOComponent);
function ISOMsg() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, ISOMsg);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ISOMsg.__proto__ || Object.getPrototypeOf(ISOMsg)).call.apply(_ref, [this].concat(args))), _this), _this.fields = {}, _this.maxField = -1, _this.dirty = true, _this.maxFieldDirty = true, _this.direction = 0, _this.header = null, _this.trailer = null, _this.fieldNumber = -1, _this.packager = null, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(ISOMsg, [{
key: 'setPackager',
value: function setPackager(packager) {
this.packager = packager;
}
}, {
key: 'setFieldNumber',
value: function setFieldNumber(fieldNumber) {
this.fieldNumber = fieldNumber;
}
}, {
key: 'setMTI',
value: function setMTI(mti) {
if (this.isInnter()) {
throw Error('can\'t setMTI on inner message');
}
this.set(new _ISOField2.default(0, mti));
}
}, {
key: 'isInnter',
value: function isInnter() {
return this.fieldNumber > -1;
}
}, {
key: 'set',
value: function set(c) {
if (c != null) {
var i = c.getKey();
this.fields[i] = c;
if (i > this.maxField) {
this.maxField = i;
}
this.dirty = true;
}
}
}, {
key: 'unset',
value: function unset(fldno) {
if (this.fields[fldno] != null) {
this.dirty = this.maxFieldDirty = true;
delete this.fields[fldno];
}
}
}, {
key: 'setField',
value: function setField(fldno, value) {
if (value != null) {
if (!(this.packager instanceof _ISOBasePackager2.default)) {
this.set(new _ISOField2.default(fldno, value));
} else {
var obj = this.packager.getFieldPackager(fldno);
if (obj instanceof _ISOBinaryFieldPackager2.default) {
this.set(new _ISOBinaryField2.default(fldno, _ISOUtil2.default.hex2byte(value)));
} else {
this.set(new _ISOField2.default(fldno, value));
}
}
} else {
this.unset(fldno);
}
}
}, {
key: 'getMTI',
value: function getMTI() {
return this.getValue(0);
}
}, {
key: 'getValue',
value: function getValue(fldno) {
var field = this.fields[fldno];
return field ? field.getValue() : undefined;
}
}, {
key: 'getComposite',
value: function getComposite() {
//noinspection JSValidateTypes
return this;
}
}, {
key: 'getChildren',
value: function getChildren() {
return this.fields;
}
}, {
key: 'setHeader',
value: function setHeader(header) {
this.header = header;
}
}, {
key: 'getHeader',
value: function getHeader() {
return this.header != null ? this.header.pack() : null;
}
}, {
key: 'getMaxField',
value: function getMaxField() {
if (this.maxFieldDirty) {
this._recalcMaxField();
}
return this.maxField;
}
}, {
key: 'pack',
value: function pack() {
this._recalcBitMap();
return this.packager.pack(this);
}
}, {
key: 'unpack',
value: function unpack(b) {
return this.packager.unpack(this, b);
}
}, {
key: '_recalcBitMap',
value: function _recalcBitMap() {
if (!this.dirty) {
return;
}
var mf = Math.min(this.getMaxField(), 192);
var bmap = new _BitSet2.default(mf + 62 >> 6 << 6);
for (var i = 1; i <= mf; i++) {
if (this.fields[i] != null) {
bmap.set(i);
}
}
this.set(new _ISOBitMap2.default(-1, bmap));
this.dirty = false;
}
/**
*
* @private
*/
}, {
key: '_recalcMaxField',
value: function _recalcMaxField() {
var _this2 = this;
this.maxField = 0;
Object.keys(this.fields).forEach(function (key) {
_this2.maxField = Math.max(_this2.maxField, Number(key));
});
this.maxFieldDirty = false;
}
}]);
return ISOMsg;
}(_ISOComponent3.default);
exports.default = ISOMsg;