connect 连接到 QQClient.servers 中的服务器
()
| 113 | |
| 114 | // connect 连接到 QQClient.servers 中的服务器 |
| 115 | func (c *QQClient) connect() error { |
| 116 | // init qq servers |
| 117 | c.initServerOnce.Do(c.initServers) |
| 118 | |
| 119 | addr := c.servers[c.currServerIndex].String() |
| 120 | c.info("connect to server: %v", addr) |
| 121 | err := c.TCP.Connect(addr) |
| 122 | c.currServerIndex++ |
| 123 | if c.currServerIndex == len(c.servers) { |
| 124 | c.currServerIndex = 0 |
| 125 | } |
| 126 | if err != nil { |
| 127 | c.retryTimes++ |
| 128 | if c.retryTimes > len(c.servers) { |
| 129 | return errors.New("All servers are unreachable") |
| 130 | } |
| 131 | c.error("connect server error: %v", err) |
| 132 | return err |
| 133 | } |
| 134 | c.once.Do(func() { |
| 135 | c.SelfGroupMessageEvent.Subscribe(func(_ *QQClient, _ *message.GroupMessage) { |
| 136 | c.stat.MessageReceived.Add(1) |
| 137 | c.stat.LastMessageTime.Store(time.Now().Unix()) |
| 138 | }) |
| 139 | c.GroupMessageEvent.Subscribe(func(_ *QQClient, _ *message.GroupMessage) { |
| 140 | c.stat.MessageReceived.Add(1) |
| 141 | c.stat.LastMessageTime.Store(time.Now().Unix()) |
| 142 | }) |
| 143 | c.SelfPrivateMessageEvent.Subscribe(func(_ *QQClient, _ *message.PrivateMessage) { |
| 144 | c.stat.MessageReceived.Add(1) |
| 145 | c.stat.LastMessageTime.Store(time.Now().Unix()) |
| 146 | }) |
| 147 | c.PrivateMessageEvent.Subscribe(func(_ *QQClient, _ *message.PrivateMessage) { |
| 148 | c.stat.MessageReceived.Add(1) |
| 149 | c.stat.LastMessageTime.Store(time.Now().Unix()) |
| 150 | }) |
| 151 | c.SelfTempMessageEvent.Subscribe(func(_ *QQClient, _ *message.TempMessage) { |
| 152 | c.stat.MessageReceived.Add(1) |
| 153 | c.stat.LastMessageTime.Store(time.Now().Unix()) |
| 154 | }) |
| 155 | c.TempMessageEvent.Subscribe(func(_ *QQClient, _ *message.TempMessage) { |
| 156 | c.stat.MessageReceived.Add(1) |
| 157 | c.stat.LastMessageTime.Store(time.Now().Unix()) |
| 158 | }) |
| 159 | c.onGroupMessageReceipt("internal", func(_ *QQClient, _ *groupMessageReceiptEvent) { |
| 160 | c.stat.MessageSent.Add(1) |
| 161 | }) |
| 162 | go c.netLoop() |
| 163 | }) |
| 164 | c.retryTimes = 0 |
| 165 | c.ConnectTime = time.Now() |
| 166 | return nil |
| 167 | } |
| 168 | |
| 169 | // quickReconnect 快速重连 |
| 170 | func (c *QQClient) quickReconnect() { |
no test coverage detected