1+ import * as net from 'net' ;
2+ import * as EventEmitter from 'events' ;
3+ import RequestMessage from "./RequestMessage" ;
4+ import ResponseMessage from "./ResponseMessage" ;
5+
6+ type Handler = ( request : RequestMessage , response : ResponseMessage ) => void ;
7+
8+ const defaultPort = 3000 ;
9+
10+ class HTTP extends EventEmitter {
11+ handler : Handler ;
12+ request : RequestMessage ;
13+ response : ResponseMessage ;
14+ server : net . Server ;
15+ socket : net . Socket ;
16+ constructor ( handler : Handler ) {
17+ super ( ) ;
18+ this . handler = handler ;
19+ this . createServer ( ) ;
20+ }
21+
22+ private createServer ( ) : void {
23+ this . server = net . createServer ( socket => {
24+ socket . on ( 'data' , ( data : Buffer ) => {
25+ const message = data . toString ( 'utf-8' ) ;
26+ this . request = new RequestMessage ( message ) ;
27+ this . response = new ResponseMessage ( socket ) ;
28+ this . handler ( this . request , this . response ) ; // 返回 req res
29+ } ) ;
30+
31+ socket . on ( 'error' , error => {
32+ this . emit ( 'error' , error ) ;
33+ } )
34+ } )
35+ }
36+
37+ public listen ( port : number = defaultPort , callback : any = ( ) => { } ) : void {
38+ this . server . listen ( port , callback ) ;
39+ this . server . on ( 'error' , error => this . emit ( 'error' , error ) ) ;
40+ }
41+ }
42+
43+ const createServer = ( handler : Handler ) => {
44+ return new HTTP ( handler ) ;
45+ }
46+
47+ export default {
48+ createServer
49+ }
0 commit comments