()
| 108 | } |
| 109 | |
| 110 | func (p *PingMgr) Run() { |
| 111 | defer p.recover() |
| 112 | var ticker = time.NewTicker(time.Duration(CHECKTIME) * time.Millisecond) |
| 113 | timer_manager := p.timer_manager |
| 114 | ev_queue := p.ev_queue |
| 115 | event_chan := ev_queue.SemaChan() |
| 116 | event_list := p.event_list |
| 117 | for { |
| 118 | |
| 119 | atomic.StoreInt64(&nowTick, time.Now().Unix()) |
| 120 | |
| 121 | if p.event_index >= p.event_count { |
| 122 | p.event_count = ev_queue.Get(event_list, uint32(KEEP_ALIVE_POLL_COUNT)) |
| 123 | p.event_index = 0 |
| 124 | } |
| 125 | |
| 126 | for p.event_index < p.event_count { |
| 127 | ping_event := event_list[p.event_index].(*PingEventMsg) |
| 128 | event_list[p.event_index] = nil |
| 129 | p.event_index++ |
| 130 | p.handle_event(ping_event) |
| 131 | ping_event.Reset() |
| 132 | p.event_pool.Put(ping_event) |
| 133 | } |
| 134 | |
| 135 | timer_manager.Execute(256) |
| 136 | |
| 137 | if ev_queue.WaitNotify() == false { |
| 138 | continue |
| 139 | } |
| 140 | |
| 141 | select { |
| 142 | case <-event_chan: |
| 143 | case <-ticker.C: |
| 144 | } |
| 145 | |
| 146 | ev_queue.WaiterWake() |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | func (p *PingMgr) handle_event(e *PingEventMsg) { |
| 151 | linker := e.Sender |
no test coverage detected