2 Commits 66a4c58c2b ... adff55fcf4

Auteur SHA1 Bericht Datum
  enzo adff55fcf4 adjustments and enhancements 4 maanden geleden
  enzo cf38da9afb update to open path for user interface response 4 maanden geleden

+ 1 - 0
apps/fis-fingerprint/src/fis-fingerprint.controller.ts

@@ -28,5 +28,6 @@ export class FisFingerprintController {
   @EventPattern(`verification`)
   handleVerification(message: any): void {
     //  put int service and pass to sampleapp to redirect the response back to UI
+    this.fisFingerprintService.emit(`message`, message)
   }
 }

+ 5 - 0
apps/fis-fingerprint/src/fis-fingerprint.service.ts

@@ -20,4 +20,9 @@ export class FisFingerprintService {
     this.verificationClient.emit(`message`, message)
   }
 
+  emit(event: string, message: any): void {
+    this.logger.log(`Sending response back to Main`)
+    this.sampleAppClient.emit(event, message)
+  }
+
 }  

+ 44 - 23
apps/fis-verification/src/fis-verification.service.ts

@@ -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,19 @@ 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
           }
         }
-        this.fingerprintClient.emit(`message`, response)
+        // console.log(`Sending back to fingerpint nest`)
+        console.log(response)
+        this.fingerprintClient.emit(`verification`, response)
       }
 
       if (message.operation == `Registration` && message.status == `Success`) {
@@ -56,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 

+ 5 - 2
apps/sample-app/src/sample-app.controller.ts

@@ -1,6 +1,8 @@
 import { Body, Controller, Get, Post } from '@nestjs/common';
 import { SampleAppService } from './sample-app.service';
 import { EventPattern } from '@nestjs/microservices';
+import { SampleEventsGateway } from './sample-app.gateway';
+import { FisMessage } from 'libs';
 
 @Controller()
 export class SampleAppController {
@@ -22,7 +24,8 @@ export class SampleAppController {
   }
 
   @EventPattern(`message`)
-  sayHello(data: string): void {
-    console.log(data)
+  sayHello(data: FisMessage): void {
+    // console.log(data.data)
+    this.sampleAppService.emitFpResponse(data)
   }
 }

+ 11 - 2
apps/sample-app/src/sample-app.gateway.ts

@@ -1,10 +1,11 @@
 import { Inject, Injectable, Logger } from '@nestjs/common';
 import { ClientProxy } from '@nestjs/microservices';
 import { ConnectedSocket, MessageBody, OnGatewayConnection, OnGatewayDisconnect, SubscribeMessage, WebSocketGateway, WebSocketServer, WsResponse, } from '@nestjs/websockets';
-import { from, Observable } from 'rxjs';
+import { from, Observable, Subject } from 'rxjs';
 import { map } from 'rxjs/operators';
 import { Server, Socket } from 'socket.io';
 import { SampleAppService } from './sample-app.service';
+import { FisMessage } from 'libs';
 
 @WebSocketGateway({
     cors: {
@@ -17,8 +18,12 @@ export class SampleEventsGateway implements OnGatewayConnection, OnGatewayDiscon
     server!: Server;
     logger: Logger = new Logger(`SampleEventGateway`)
 
+    private messageResponseSubject: Subject<FisMessage> = new Subject()
+
     constructor(private readonly service: SampleAppService) {
         // logic here
+        this.service.getFingerprintMessages().subscribe(message => this.messageResponseSubject.next(message));
+        this.service.getFingerprintMessages().subscribe(message => console.log(message));
     }
 
     @SubscribeMessage('test')
@@ -27,10 +32,14 @@ export class SampleEventsGateway implements OnGatewayConnection, OnGatewayDiscon
     }
 
     @SubscribeMessage('message')
-    handleMesage(@MessageBody() data: string, @ConnectedSocket() client: Socket): void {
+    handleMesage(@MessageBody() data: string, @ConnectedSocket() client: Socket): Observable<WsResponse<FisMessage>> {
         // console.log(data)
         this.logger.log(`Received data from ${client.id}`)
         this.service.emit(data)
+
+        return this.messageResponseSubject.asObservable().pipe(
+            map(data => ({ event: `message`, data: data }))
+        )
     }
 
     // this two methods are non essential. as they are used to keep track of the local ui port 3000, not keeping track of the actual clients 

+ 11 - 0
apps/sample-app/src/sample-app.service.ts

@@ -1,8 +1,11 @@
 import { Inject, Injectable } from '@nestjs/common';
 import { ClientProxy } from '@nestjs/microservices';
+import { FisMessage } from 'libs';
+import { Observable, Subject } from 'rxjs';
 
 @Injectable()
 export class SampleAppService {
+  private fingerprintMessage: Subject<FisMessage> = new Subject()
 
   constructor(
     @Inject(`FINGERPRINT_SERVICE`) private fingerprintClient: ClientProxy,
@@ -25,4 +28,12 @@ export class SampleAppService {
   emit(data: any): void {
     this.fingerprintClient.emit(`message`, data)
   }
+
+  getFingerprintMessages(): Observable<FisMessage> {
+    return this.fingerprintMessage.asObservable()
+  }
+
+  emitFpResponse(message: FisMessage): void {
+    this.fingerprintMessage.next(message)
+  }
 }

+ 3 - 0
config/configurations.ts

@@ -19,5 +19,8 @@ export default () => ({
     afis: {
         host: process.env.HOST,
         tcpPort: process.env.AFIS_TCP_PORT
+    },
+    edgeScore: {
+        mark: 250
     }
 });

+ 1 - 1
libs/java/FingerprintDataVerification

@@ -1 +1 @@
-Subproject commit e33fa7b3aa05f1bf3b8eb1537e1ac0e3802e1258
+Subproject commit 75313dd9f51c7030cc4f14fef4f882da1c312434

+ 9 - 2
libs/types/interface.ts

@@ -31,7 +31,7 @@ export interface FisMessage {
 
 export interface FingerprintPayloadUI {
     id: string,
-    cmd: `Registration` | `Verification` | `QualityAssurance`,
+    cmd: `Registration` | `Verification` | `Quality Assurance` | `Populate Registered Prints`,
     date: Date,
     personInfo: PersonInfo,
     fpScan: string,
@@ -43,7 +43,7 @@ export interface FingerprintPayload extends FingerprintPayloadUI {
 
 export interface JavaResponse {
     id: string,
-    operation: `Registration` | `Verification` | `QualityAssurance`,
+    operation: `Registration` | `Verification` | `Quality Assurance`,
     status: `Failed` | `Success` | `Registered` | `Not Registered`,
     message: string,
     data: PersonFingerprintData,
@@ -70,3 +70,10 @@ export interface PersonInfo {
     org: string,
     code: number
 }
+
+export interface TransparencyResponseData {
+    score: number,
+    person: string,
+    fpPosition: number,
+    fpQuality: `good` | 'bad'
+}