diff options
Diffstat (limited to 'iosocket-client.go')
-rw-r--r-- | iosocket-client.go | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/iosocket-client.go b/iosocket-client.go new file mode 100644 index 0000000..9115b10 --- /dev/null +++ b/iosocket-client.go @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2018 "IoT.bzh" + * Author Sebastien Douheret <sebastien@iot.bzh> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package main + +import ( + "fmt" + "sync" + + socketio_client "github.com/sebd71/go-socket.io-client" +) + +// IOSockClient . +type IOSockClient struct { + URL string + Conn *socketio_client.Client + Options *socketio_client.Options + EmitMutex *sync.Mutex + Connected bool + EscapeKeys []byte +} + +// NewIoSocketClient Create a new IOSockClient +func NewIoSocketClient(url, clientID string) (*IOSockClient, error) { + + var err error + + sCli := &IOSockClient{ + URL: url, + EmitMutex: &sync.Mutex{}, + Options: &socketio_client.Options{ + Transport: "websocket", + Header: make(map[string][]string), + }, + } + sCli.Options.Header["XDS-AGENT-SID"] = []string{clientID} + + sCli.Conn, err = socketio_client.NewClient(url, sCli.Options) + if err != nil { + return nil, fmt.Errorf("IO.socket connection error: " + err.Error()) + } + + sCli.Conn.On("connection", func() { + sCli.Connected = true + }) + + sCli.Conn.On("disconnection", func(err error) { + Log.Debugf("WS disconnection event with err: %v\n", err) + sCli.Connected = false + }) + + return sCli, nil +} + +// On record a callback on a specific message +func (c *IOSockClient) On(message string, f interface{}) (err error) { + return c.Conn.On(message, f) +} + +// Emit send a message +func (c *IOSockClient) Emit(message string, args ...interface{}) (err error) { + c.EmitMutex.Lock() + defer c.EmitMutex.Unlock() + return c.Conn.Emit(message, args...) +} |