| 
					
				 | 
			
			
				@@ -4,13 +4,14 @@ import { interval, Observable, Subject } from 'rxjs'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import * as net from 'net' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { ConfigService } from '@nestjs/config'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { connectToAfisJava } from 'libs/java/afis.utils'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { Fingerprint, FingerprintPayload, FingerprintPayloadUI, FisMessage, JavaResponse, PersonFingerprintData } from 'libs'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Fingerprint, FingerprintPayload, FingerprintPayloadUI, FisMessage, JavaResponse, PersonFingerprintData, TransparencyResponseData } from 'libs'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { v1 as uuid } from 'uuid' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Injectable() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export class FisVerificationService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private port: number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private host: string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private edgeScoreThreshold: number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private javaClient: net.Socket 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private incomingMessageFromJava!: Subject<JavaResponse> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private registeredFingerprintData: Fingerprint[] = [] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -21,15 +22,47 @@ export class FisVerificationService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private configService: ConfigService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Set up incoming responses or messages from TCP Java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.incomingMessageFromJava = new Subject() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this.port = this.configService.get<number>('afis.tcpPort') as number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this.host = this.configService.get<string>('afis.host') as string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.edgeScoreThreshold = this.configService.get<number>('edgeScore.mark') as number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.handleJavaResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this.javaClient = connectToAfisJava(this.host, this.port) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     this.javaClient.on(`data`, (data) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       let message: JavaResponse = JSON.parse(data.toString()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      console.log(message) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      console.log(`Java server response: ${message.message}`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (message.operation == `QualityAssurance`) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.incomingMessageFromJava.next(message) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public handleMessage(message: FisMessage): void { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    console.log(`Sending fingerprint data to Java verification....`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let payload: FingerprintPayloadUI = message.data as FingerprintPayloadUI 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let command: FingerprintPayload = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ...payload, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fpTemplateArray: this.registeredFingerprintData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.javaClient.write(JSON.stringify(command) + `\n`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private populateRegisteredFpData(): void { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // let command: FingerprintPayload = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   id: uuid(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   cmd: `Populate Registered Prints`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   date: new Date(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   personInfo: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   fpScan: ``, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   fingerPosition: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //   fpTemplateArray: this.registeredFingerprintData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // this.javaClient.write(JSON.stringify(command)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private handleJavaResponse(): void { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.incomingMessageFromJava.subscribe(message => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // console.log(`Java server response: ${message.message}`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (message.operation == `Quality Assurance`) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let response: FisMessage = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           header: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             messageID: uuid(), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,17 +70,18 @@ export class FisVerificationService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           data: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             id: uuid(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cmd: `QualityAssurance`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            message: `${message.data.name} finger position ${message.data.fingerprints[0].fpPosition} edge score is ${(message.edgeScore > 250 ? `good` : `bad`)}`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cmd: `Quality Assurance`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            message: `${message.data.name} finger position ${message.data.fingerprints[0].fpPosition} edge score is ${message.edgeScore > this.edgeScoreThreshold ? `good` : `bad`}`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             data: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               score: message.score, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               person: message.data.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               fpPosition: message.data.fingerprints[0].fpPosition, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              fpQuality: (message.score > 250 ? `good` : `bad`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              fpQuality: message.edgeScore > this.edgeScoreThreshold ? `good` : `bad` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } as TransparencyResponseData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        console.log(`Sending back to fingerpint nest`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // console.log(`Sending back to fingerpint nest`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.fingerprintClient.emit(`verification`, response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -57,23 +91,9 @@ export class FisVerificationService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // console.log(this.registeredFingerprintData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         console.log(`${this.registeredFingerprintData.length} registered print.`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // this.incomingMessageFromJava.next(message) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public handleMessage(message: FisMessage): void { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    console.log(`Sending fingerprint data to Java verification....`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let payload: FingerprintPayloadUI = message.data as FingerprintPayloadUI 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let command: FingerprintPayload = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ...payload, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      fpTemplateArray: this.registeredFingerprintData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    this.javaClient.write(JSON.stringify(command) + `\n`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // let data = JSON.parse(message) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // console.log(data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // this.javaClient.write(JSON.stringify(extractionMessage) + `\n`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* Reason based on ChatGPT: Why ClientProxy.send() or emit() won't work  
			 |