package net import ( "errors" "github.com/gorilla/websocket" "time" ) type ProxyClient struct { proxy string conn *ClientConn } func (this*ProxyClient) Connect() error { var dialer = websocket.Dialer{ Subprotocols: []string{"p1", "p2"}, ReadBufferSize: 1024, WriteBufferSize: 1024, HandshakeTimeout: 30 * time.Second, } ws, _, err := dialer.Dial(this.proxy, nil) if err == nil{ this.conn = NewClientConn(ws) if this.conn.Start() == false{ return errors.New("handshake fail") } } return err } func (this*ProxyClient) Send(msgName string, msg interface{}) (*RspBody, error){ if this.conn != nil { return this.conn.Send(msgName, msg), nil } return nil, errors.New("conn not found") } func (this *ProxyClient) SetOnPush(hookFunc func (*ClientConn, *RspBody)) { if this.conn != nil { this.conn.SetOnPush(hookFunc) } } func (this *ProxyClient) SetOnClose(hookFunc func (*ClientConn)) { if this.conn != nil { this.conn.SetOnClose(hookFunc) } } func (this *ProxyClient) SetProperty(key string, value interface{}) { if this.conn != nil { this.conn.SetProperty(key, value) } } func (this *ProxyClient) Close() { if this.conn != nil { this.conn.Close() } } func NewProxyClient(proxy string) *ProxyClient { return & ProxyClient{ proxy: proxy, } }