Scheduler.js

Summary

Personalization Client


Class Summary
Scheduler  

/**
 *  ---------
 * |.##> <##.|  SmartCard-HSM Support Scripts
 * |#       #|
 * |#       #|  Copyright (c) 2011-2012 CardContact Software & System Consulting
 * |'##> <##'|  Andreas Schwier, 32429 Minden, Germany (www.cardcontact.de)
 *  ---------
 *
 * Consult your license package for usage terms and conditions.
 *
 * @fileoverview Personalization Client
 */

var CardTask	= require("CardTask").CardTask;
var PortalPersonalizer		= require("PortalPersonalizer").PortalPersonalizer;



function Scheduler(jobs) {
	this.jobs = jobs;
	this.taskmap = [];
}

exports.Scheduler = Scheduler;



Scheduler.prototype.handleSingle = function(readername) {
	this.term.off();
	this.card = new Card(readername);
	try	{
		var msg = scheduler.handleCard(this.card);
		print("Personalization complete: " + msg);
		this.term.green();
	}
	catch(e) {
		GPSystem.trace(e);
		print("Personalization failed with " + e.message);
		this.term.red();
		GPSystem.wait(200);
		this.term.off();
		GPSystem.wait(200);
		this.term.red();
	}
	delete this.card;
}



Scheduler.prototype.isIgnoredReader = function(readername) {
	if ((_scsh3.reader == null) || (_scsh3.reader.length == 0)) {
		return false;
	}

	var str = "!" + readername;
	var list = _scsh3.reader.split(";");
	return list.indexOf(str) >= 0;
}



Scheduler.prototype.cardInserted = function(readername) {
	print("Inserted " + readername);

	if (this.isIgnoredReader(readername)) {
		print("Skipped reader");
		return;
	}

	if (this.mode == 2) {
		var t = this.taskmap[readername];

		if (typeof(t) != "undefined") {
			print("Reader " + readername + " already running. Ignored");
		}

		t = new CardTask(this, readername);
		this.taskmap[readername] = t;
		t.start();
	} else if (this.mode == 1) {
		if (this.card) {
			print("Personalization in progress...");
			return;
		}
		this.handleSingle(readername);
	}
}



Scheduler.prototype.cardRemoved = function(readername) {
	print("Removed " + readername);

	if (this.isIgnoredReader(readername)) {
		print("Skipped reader");
		return;
	}

	if (this.mode == 2) {
		var t = this.taskmap[readername];
		if (typeof(t) != "undefined") {
			t.stop();
			delete this.taskmap[readername];
		}
	}
}



Scheduler.prototype.cardNotification = function(readername) {
	if (this.isIgnoredReader(readername)) {
		print("Skipped reader");
		return;
	}

	if (this.mode == 2) {
		var t = this.taskmap[readername];
		if (typeof(t) != "undefined") {
			t.notify();
		}
	} else {
		print(this.card.remoteMessage + "(" + this.card.remoteMessageId + ")");
	}
}



Scheduler.prototype.handleCard = function(card) {
	var msg = "Done";

	if (this.initializer) {
		var msg = this.initializer.handleCard(card);
	}
	if (this.personalizer) {
		var msg = this.personalizer.handleCard(card);
	}
	print(msg);

	return msg;
}



Scheduler.prototype.selectJob = function() {
	var list = [];

	for (var i = 0; i < this.jobs.length; i++) {
		list.push(this.jobs[i].Name);
	}

	var cust = Dialog.prompt("Select job", "", list);
	if (cust == null) {
		throw new Error("User abort");
	}

	var i = list.indexOf(cust);
	this.job = this.jobs[i];

	if (typeof(this.job.PortalPersonalizer) != "undefined") {
		this.personalizer = new PortalPersonalizer(this.job.PortalPersonalizer);
		this.personalizer.configure();
	}
}



Scheduler.prototype.selectMode = function() {
	var modelist = [ "Single-Shot", "Single-Card-Insert", "Multi-Card-Insert" ];

	var sel = Dialog.prompt("Mode", modelist[0], modelist);
	if (sel == null) throw new Error("User abort");

	this.mode = modelist.indexOf(sel);

	if (this.mode != 2) {
		this.term = new AccessTerminal();
		this.term.green();
	}

	if (this.mode == 0) {
		scheduler.handleSingle(_scsh3.reader);
	} else {
		Card.setCardEventListener(this);
		print("Personalization system ready. Please insert card.");
	}
}


Documentation generated by JSDoc on Sat Feb 24 15:17:19 2024