()
| 375 | } |
| 376 | |
| 377 | func (c *conn) close() { |
| 378 | c.closeOnce.Do(func() { |
| 379 | close(c.closed) |
| 380 | }) |
| 381 | // 关闭所有未结束的流订阅,避免 caller 永久阻塞。 |
| 382 | // 放在 closeOnce 之外是为了允许 close() 多次调用都执行(虽然实际通常只一次)。 |
| 383 | c.streamSubs.Range(func(key, value any) bool { |
| 384 | s := value.(*Stream) |
| 385 | s.closeFromHub(ErrNodeOffline) |
| 386 | return true |
| 387 | }) |
| 388 | } |
| 389 | |
| 390 | // IsOnline 返回指定 nodeID 是否当前在线。 |
| 391 | func (h *Hub) IsOnline(nodeID string) bool { |
no test coverage detected