-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.go
93 lines (89 loc) · 1.7 KB
/
server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package sophonn
import (
"github.com/fbelisk/aeolus/listener"
"github.com/fbelisk/aeolus/poll"
)
type MessageHandle func(message []byte) error
type Server struct {
ln *listener.Listener
messageHandle MessageHandle
len int
lastIndex int
Pollers []*poll.Poller
}
//func Run(p protocol.Protocal, handle MessageHandle, addr string) error {
// sync.WaitGroup{}
// ln, err := listener.NewListener(p, addr)
// if err != nil {
// return err
// }
//
// s := &Server{
// ln: ln,
// }
//
// num := runtime.NumCPU()
// w := util.WaitGroupWrapper{}
// for i := 0; i < num; i++ {
// p, err := poll.Create()
// if err != nil {
// return err
// }
// s.Pollers[i] = p
// w.Wrap(func() {
// err = p.Wait(s.PollerHandle)
// if err != nil {
// //todo log
// }
// })
// }
// err = s.NextPoller().AddRead(ln.Fd)
// if err != nil {
// return err
// }
//
// if err != nil {
// return err
// }
//}
//
//func (s *Server) PollerHandle(fd int, event uint32) error {
// switch fd {
// case s.ln.Fd:
// nfd, _, err := unix.Accept(fd)
// if err != nil {
// if err == unix.EAGAIN {
// return nil
// }
// return err
// }
// if err := unix.SetNonblock(nfd, true); err != nil {
// return err
// }
//
// //add connect fd into poller
// err = s.NextPoller().AddRead(nfd)
// if err != nil {
// return err
// }
//
// return nil
// default:
// s.messageHandle()
// }
//
//}
//
//func (s *Server) NewEventLoop(handle poll.Handler) (*EventLoop, error) {
// return s, nil
//}
//
////todo lock multi goroutine && more load Balance
//func (s *Server) NextPoller() *poll.Poller {
// nextIndex := 0
// if s.lastIndex < s.len {
// nextIndex = s.lastIndex + 1
// s.lastIndex = nextIndex
// }
// return s.Pollers[nextIndex]
//}