11import ms from 'ms'
22import { debug as createDebugLogger , Debugger } from 'debug'
33import { EventEmitter } from 'events'
4+ import { devp2pDebug } from '../util'
45import { Peer , DISCONNECT_REASONS } from '../rlpx/peer'
56
7+ export enum EthProtocol {
8+ ETH = 'eth' ,
9+ LES = 'les' ,
10+ }
11+
612type MessageCodes = { [ key : number | string ] : number | string }
713
14+ export type SendMethod = ( code : number , data : Buffer ) => any
15+
816export class Protocol extends EventEmitter {
17+ _version : number
918 _peer : Peer
19+ _send : SendMethod
1020 _statusTimeoutId : NodeJS . Timeout
1121 _messageCodes : MessageCodes
1222 _debug : Debugger
@@ -16,38 +26,45 @@ export class Protocol extends EventEmitter {
1626 * Will be set to the first successfully connected peer to allow for
1727 * debugging with the `devp2p:FIRST_PEER` debugger
1828 */
19- _firstPeer : string
29+ _firstPeer = ''
2030
2131 // Message debuggers (e.g. { 'GET_BLOCK_HEADERS': [debug Object], ...})
2232 protected msgDebuggers : { [ key : string ] : ( debug : string ) => void } = { }
2333
24- constructor ( peer : Peer , _messageCodes : MessageCodes , debugBaseName : string ) {
34+ constructor (
35+ peer : Peer ,
36+ send : SendMethod ,
37+ protocol : EthProtocol ,
38+ version : number ,
39+ messageCodes : MessageCodes
40+ ) {
2541 super ( )
2642
27- this . _firstPeer = ''
2843 this . _peer = peer
29- this . _messageCodes = _messageCodes
44+ this . _send = send
45+ this . _version = version
46+ this . _messageCodes = messageCodes
3047 this . _statusTimeoutId = setTimeout ( ( ) => {
3148 this . _peer . disconnect ( DISCONNECT_REASONS . TIMEOUT )
3249 } , ms ( '5s' ) )
3350
34- this . _debug = createDebugLogger ( debugBaseName )
51+ this . _debug = devp2pDebug . extend ( protocol )
3552 this . _verbose = createDebugLogger ( 'verbose' ) . enabled
36- this . initMsgDebuggers ( debugBaseName )
53+ this . initMsgDebuggers ( protocol )
3754 }
3855
39- private initMsgDebuggers ( debugBaseName : string ) {
56+ private initMsgDebuggers ( protocol : EthProtocol ) {
4057 const MESSAGE_NAMES = Object . values ( this . _messageCodes ) . filter (
4158 ( value ) => typeof value === 'string'
4259 ) as string [ ]
4360 for ( const name of MESSAGE_NAMES ) {
44- this . msgDebuggers [ name ] = createDebugLogger ( ` ${ debugBaseName } : ${ name } ` )
61+ this . msgDebuggers [ name ] = devp2pDebug . extend ( protocol ) . extend ( name )
4562 }
4663
4764 // Remote Peer IP logger
4865 const ip = this . _peer . _socket . remoteAddress
4966 if ( ip ) {
50- this . msgDebuggers [ ip ] = createDebugLogger ( `devp2p: ${ ip } ` )
67+ this . msgDebuggers [ ip ] = devp2pDebug . extend ( ip )
5168 }
5269 }
5370
@@ -60,7 +77,7 @@ export class Protocol extends EventEmitter {
6077 _addFirstPeerDebugger ( ) {
6178 const ip = this . _peer . _socket . remoteAddress
6279 if ( ip ) {
63- this . msgDebuggers [ ip ] = createDebugLogger ( `devp2p: FIRST_PEER` )
80+ this . msgDebuggers [ ip ] = devp2pDebug . extend ( ' FIRST_PEER' )
6481 this . _peer . _addFirstPeerDebugger ( )
6582 this . _firstPeer = ip
6683 }
0 commit comments