func (c *Client) On(event string, h EventHandler) {
	c.Lock()
	c.events[event] = h
	c.Unlock()
	conn := c.hub.rpool.Get()
	defer func() {
		conn.Close()
	}()
	nt := time.Now().Unix()
	conn.Send("MULTI")
	if c.uid != "" {
		conn.Send("ZADD", c.hub.ChannelPrefix+c.prefix+"@"+"online", "CH", nt, c.uid)
	}
	conn.Send("ZADD", c.hub.ChannelPrefix+c.prefix+"@"+"channels:"+event, "CH", nt, c.uid)
	conn.Do("EXEC")
	return
}
On event.  client on event
package redisocket
import (
	"bytes"
	"errors"
	"io"
	"sync"
	"time"
	"github.com/gorilla/websocket"
)
type Client struct {
	prefix string
	sid    string
	uid    string
	ws     *websocket.Conn
	events map[string]EventHandler
	send   chan *Payload
	*sync.RWMutex
	re   ReceiveMsgHandler
	hub  *Hub
	auth *Auth
}
func (c *Client) SocketId() string {
	return c.sid
}
func (c *Client) contains(a []string, x string) bool {
	for _, n := range a {
		if x == n {
			return true
		}
	}
	return false
}
func (c *Client) SetChannels(s []string) {
	c.Lock()
	defer c.Unlock()
	c.auth.Channels = s
	for k, _ := range c.events {
		if !c.contains(s, k) {
			delete(c.events, k)
		}
	}
}
func (c *Client) AddChannel(s string) {
	c.Lock()
	defer c.Unlock()
	if !c.contains(c.auth.Channels, s) {
		c.auth.Channels = append(c.auth.Channels, s)
	}
}
func (c *Client) GetAuth() Auth {
	c.RLock()
	defer c.RUnlock()
	return *c.auth
}