File tree 1 file changed +47
-0
lines changed
1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change
1
+ package httpserver
2
+
3
+ import (
4
+ "net"
5
+ )
6
+
7
+ type Server struct {
8
+ router * Router
9
+ }
10
+
11
+ func NewServer () * Server {
12
+ return & Server {
13
+ router : NewRouter (),
14
+ }
15
+ }
16
+
17
+ func (s * Server ) Handle (method , path string , handler HandlerFunc ) {
18
+ s .router .Handle (method , path , handler )
19
+ }
20
+
21
+ func (s * Server ) ListenAndServe (address string ) error {
22
+ listener , err := net .Listen ("tcp" , address )
23
+ if err != nil {
24
+ return err
25
+ }
26
+ defer listener .Close ()
27
+
28
+ for {
29
+ conn , err := listener .Accept ()
30
+ if err != nil {
31
+ continue
32
+ }
33
+ go s .handleConnection (conn )
34
+ }
35
+ }
36
+
37
+ func (s * Server ) handleConnection (conn net.Conn ) {
38
+ defer conn .Close ()
39
+
40
+ httpRequest , err := Parse (conn )
41
+ if err != nil {
42
+ return
43
+ }
44
+
45
+ res := NewResponse (conn )
46
+ s .router .Serve (httpRequest , res )
47
+ }
You can’t perform that action at this time.
0 commit comments