代码拉取完成,页面将自动刷新
package zmlink
import (
"net"
"sync"
)
type Client struct {
clientID string
Type string // tcp4/udp
Address string // listen address
linkEventListener LinkEventListener
link *Link
sync.Mutex // conneceted 锁
}
func NewLinkClient(clientID, address string, linkEventListener LinkEventListener) *Client {
l := &Client{
clientID: clientID,
Type: "tcp",
Address: address,
linkEventListener: linkEventListener,
}
return l
}
func (c *Client) Start() error {
tcpAddr, err := net.ResolveTCPAddr(c.Type, c.Address)
if err != nil {
return err
}
conn, err := net.DialTCP(c.Type, nil, tcpAddr)
if err != nil {
return err
}
c.link = newLink(conn, c)
c.link.SetClientID(c.clientID)
err = c.link.run()
if err != nil {
return err
}
// 注册帧识别
if err := c.link.sendRegister(); err != nil {
c.link.Close()
return err
}
c.link.fireStatusEvent(StatusReady)
return nil
}
// GetLink 获取连接
func (c *Client) GetLink() *Link {
if c.link.status == StatusReady {
return c.link
}
return nil
}
func (c *Client) OnStream(link *Link, payload Payload, dir StreamDir) {
c.linkEventListener.OnStream(link, payload, dir)
}
func (c *Client) OnStatus(link *Link, statusType StatusType) {
if statusType == StatusClosed {
c.reconnect()
}
c.linkEventListener.OnStatus(link, statusType)
}
func (c *Client) reconnect() {
for {
if err := c.Start(); err == nil {
break
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。