import { Server, ServerUnaryCall, sendUnaryData, StatusBuilder } from '@grpc/grpc-js' import { ReflectionService } from '@grpc/reflection' import { loadSync } from '@grpc/proto-loader' import { MongoClient, Collection, Db } from 'mongodb' import { DatabaseService } from './database' import { Character, GetCharacterRequest, CreateCharacterRequest, ListCharacterRequest, ListCharacterResponse, } from './proto/character' import { characterManagerDefinition, ICharacterManager, } from './proto/character.grpc-server' const testCharacter: Character = { playerName: 'test player', characterName: 'test character', characterAlias: ['test alias'], version: 'test version', sourceTable: 'source table', json: 'test json', } export class CharacterService { reflectionService: ReflectionService characterManager: ICharacterManager databaseService: DatabaseService constructor(databaseService: DatabaseService) { this.reflectionService = new ReflectionService( loadSync('./src/proto/character.proto'), ) this.characterManager = { createCharacter: this.createCharacterCall.bind(this), getCharacter: this.getCharacterCall.bind(this), listCharacters: this.listCharactersCall.bind(this), } this.databaseService = databaseService } addToServer(server: Server) { server.addService(characterManagerDefinition, this.characterManager) this.reflectionService.addToServer(server) } async createCharacterCall( call: ServerUnaryCall, callback: sendUnaryData, ) { let newCharacter = await this.databaseService.insertCharacter( call.request.characterData, ) console.log(newCharacter) callback(null, newCharacter) } getCharacterCall( call: ServerUnaryCall, callback: sendUnaryData, ) { callback(null, testCharacter) } async listCharactersCall( call: ServerUnaryCall, callback: sendUnaryData, ) { // let characters = await this.databaseService.listCharacters( // call.request.playerName, // call.request.characterName, // ) console.log("potato") callback(new StatusBuilder().withDetails("fek").build(), { characters: [], }) } }