@ -425,6 +425,9 @@ export default class PeerClient {
* /
constructor ( manager , socket , connID ) {
this . manager = manager
this . registerTimeout = manager . registerTimeout
this . loggingKeys = manager . loggingKeys
this . socket = socket
this . connID = connID
@ -433,8 +436,6 @@ export default class PeerClient {
this . maxCommandID = 0
this . peerID = ""
this . deviceName = "KakaoTalk Bridge"
/** @type {[string]} */
this . loggingKeys = [ ]
/** @type {Map<string, UserClient>} */
this . userClients = new Map ( )
}
@ -465,10 +466,10 @@ export default class PeerClient {
setTimeout ( ( ) => {
if ( ! this . peerID && ! this . stopped ) {
this . log ( ` Didn't receive register request within ${ this . manager . registerTimeout / 1000 } seconds, terminating ` )
this . log ( ` Didn't receive register request within ${ this . registerTimeout / 1000 } seconds, terminating ` )
this . stop ( "Register request timeout" )
}
} , this . manager . registerTimeout )
} , this . registerTimeout )
}
async stop ( error = null ) {
@ -1194,12 +1195,10 @@ export default class PeerClient {
* @ param { string } req . peer _id
* @ param { Object } req . register _config
* @ param { string } req . register _config . device _name
* @ param { ? [ string ] } req . logging _keys
* /
handleRegister = async ( req ) => {
this . peerID = req . peer _id
this . deviceName = req . register _config . device _name || this . deviceName
this . loggingKeys = req . logging _keys || this . loggingKeys
this . log ( ` Registered socket ${ this . connID } -> ${ this . peerID } ` )
if ( this . manager . clients . has ( this . peerID ) ) {
const oldClient = this . manager . clients . get ( this . peerID )
@ -1230,12 +1229,7 @@ export default class PeerClient {
this . log ( "Ignoring old request" , req . id )
return
}
this . log (
` Request ${ req . id } : ` ,
[ req . command ] . concat (
this . loggingKeys . filter ( k => k in req ) . map ( k => ` ${ k } : ${ JSON . stringify ( req [ k ] , this . # writeReplacer ) } ` ) )
. join ( ', ' )
)
this . log ( ` Request ${ req . id } : ` , this . # logObj ( req , req . command , this . loggingKeys . request ) )
this . maxCommandID = req . id
let handler
if ( ! this . peerID ) {
@ -1306,17 +1300,40 @@ export default class PeerClient {
resp . command = "error"
if ( err instanceof ProtocolError ) {
resp . error = err . message
this . error ( ` Response ${ resp . id } : ${ err . message } ` )
} else {
resp . error = err . toString ( )
this . log ( ` Error handling request ${ resp . id } ${ err . stack } ` )
this . error ( ` Response ${ resp . id } : ${ err . stack } ` )
}
}
}
// TODO Check if session is broken. If it is, close the PeerClient
if ( resp . response ) {
const success = resp . response . success !== false
const logger = ( success ? this . log : this . error ) . bind ( this )
logger (
` Response ${ resp . id } : ` ,
this . # logObj (
resp . response ,
success ? "success" : "failure" ,
this . loggingKeys . response
)
)
}
await this . write ( resp )
}
# writeReplacer = function ( key , value ) {
/ * *
* @ param { object } obj
* @ param { string } desc
* @ param { [ string ] } keys
* /
# logObj ( obj , desc , keys ) {
return [ desc ] . concat (
keys . filter ( key => key in obj ) . map ( key => ` ${ key } : ${ JSON . stringify ( obj [ key ] , this . # writeReplacer ) } ` )
) . join ( ', ' )
}
# writeReplacer ( key , value ) {
if ( value instanceof Long ) {
return value . toString ( )
} else {
@ -1324,7 +1341,7 @@ export default class PeerClient {
}
}
# readReviver = function ( key , value ) {
# readReviver ( key , value ) {
if ( value instanceof Object ) {
// TODO Use a type map if there will be many possible types
if ( value . _ _type _ _ == "Long" ) {