func (server *TCPServer) init() { ln, err := net.Listen("tcp", server.Addr) if err != nil { log.Fatal("%v", err) } if server.MaxConnNum <= 0 { server.MaxConnNum = 100 log.Info("invalid MaxConnNum, reset to %v", server.MaxConnNum) } if server.PendingWriteNum <= 0 { server.PendingWriteNum = 100 log.Info("invalid PendingWriteNum, reset to %v", server.PendingWriteNum) } if server.NewAgent == nil { log.Fatal("NewAgent must not be nil") } server.ln = ln server.conns = make(ConnSet) // msg parser msgParser := NewMsgParser() msgParser.SetMsgLen(server.LenMsgLen, server.MinMsgLen, server.MaxMsgLen) msgParser.SetByteOrder(server.LittleEndian) server.msgParser = msgParser }
func (client *TCPClient) init() { client.Lock() defer client.Unlock() if client.ConnNum <= 0 { client.ConnNum = 1 log.Info("invalid ConnNum, reset to %v", client.ConnNum) } if client.ConnectInterval <= 0 { client.ConnectInterval = 3 * time.Second log.Info("invalid ConnectInterval, reset to %v", client.ConnectInterval) } if client.PendingWriteNum <= 0 { client.PendingWriteNum = 100 log.Info("invalid PendingWriteNum, reset to %v", client.PendingWriteNum) } if client.NewAgent == nil { log.Fatal("NewAgent must not be nil") } if client.conns != nil { log.Fatal("client is running") } client.conns = make(ConnSet) client.closeFlag = false // msg parser msgParser := NewMsgParser() msgParser.SetMsgLen(client.LenMsgLen, client.MinMsgLen, client.MaxMsgLen) msgParser.SetByteOrder(client.LittleEndian) client.msgParser = msgParser }
// It's dangerous to call the method on routing or marshaling (unmarshaling) func (p *Processor) SetHandler(msg interface{}, msgHandler MsgHandler) { msgType := reflect.TypeOf(msg) if msgType == nil || msgType.Kind() != reflect.Ptr { log.Fatal("json message pointer required") } msgID := msgType.Elem().Name() i, ok := p.msgInfo[msgID] if !ok { log.Fatal("message %v not registered", msgID) } i.msgHandler = msgHandler }
// It's dangerous to call the method on routing or marshaling (unmarshaling) func (p *Processor) Register(msg proto.Message) { msgType := reflect.TypeOf(msg) if msgType == nil || msgType.Kind() != reflect.Ptr { log.Fatal("protobuf message pointer required") } if _, ok := p.msgID[msgType]; ok { log.Fatal("message %s is already registered", msgType) } if len(p.msgInfo) >= math.MaxUint16 { log.Fatal("too many protobuf messages (max = %v)", math.MaxUint16) } i := new(MsgInfo) i.msgType = msgType p.msgInfo = append(p.msgInfo, i) p.msgID[msgType] = uint16(len(p.msgInfo) - 1) }
// It's dangerous to call the method on routing or marshaling (unmarshaling) func (p *Processor) Register(msg interface{}) { msgType := reflect.TypeOf(msg) if msgType == nil || msgType.Kind() != reflect.Ptr { log.Fatal("json message pointer required") } msgID := msgType.Elem().Name() if msgID == "" { log.Fatal("unnamed json message") } if _, ok := p.msgInfo[msgID]; ok { log.Fatal("message %v is already registered", msgID) } i := new(MsgInfo) i.msgType = msgType p.msgInfo[msgID] = i }
// It's dangerous to call the method on routing or marshaling (unmarshaling) func (p *Processor) SetHandler(msg proto.Message, msgHandler MsgHandler) { msgType := reflect.TypeOf(msg) id, ok := p.msgID[msgType] if !ok { log.Fatal("message %s not registered", msgType) } p.msgInfo[id].msgHandler = msgHandler }
// It's dangerous to call the method on routing or marshaling (unmarshaling) func (p *Processor) SetRouter(msg proto.Message, msgRouter *chanrpc.Server) { msgType := reflect.TypeOf(msg) id, ok := p.msgID[msgType] if !ok { log.Fatal("message %s not registered", msgType) } p.msgInfo[id].msgRouter = msgRouter }
func getTLSConfig() *tls.Config { certName := filepath.Join(conf.Env.CertPath, "cert.pem") keyName := filepath.Join(conf.Env.CertPath, "key.pem") cert, err := tls.LoadX509KeyPair(certName, keyName) if err != nil { log.Fatal("%v", err) } return &tls.Config{ Certificates: []tls.Certificate{cert}, } }
func (server *WSServer) Start(newAgent func(*WSConn) Agent) { if newAgent == nil { log.Fatal("newAgent must not be nil") } var ln net.Listener var err error if conf.Env.CertPath != "" { ln, err = tls.Listen("tcp", conf.Env.WSAddr, getTLSConfig()) } else { ln, err = net.Listen("tcp", conf.Env.WSAddr) } if err != nil { log.Fatal("%v", err) } server.ln = ln server.handler = &WSHandler{ newAgent: newAgent, conns: make(WebsocketConnSet), upgrader: websocket.Upgrader{ HandshakeTimeout: conf.Env.HTTPTimeout, CheckOrigin: func(_ *http.Request) bool { return true }, }, } httpServer := &http.Server{ Addr: conf.Env.WSAddr, Handler: server.handler, ReadTimeout: conf.Env.HTTPTimeout, WriteTimeout: conf.Env.HTTPTimeout, MaxHeaderBytes: 1024, } go httpServer.Serve(ln) log.Info("Websocket host: %v", conf.Env.WSAddr) }
// you must call the function before calling console.Init // goroutine not safe func Register(name string, help string, f interface{}, server *chanrpc.Server) { for _, c := range commands { if c.name() == name { log.Fatal("command %v is already registered", name) } } server.Register(name, f) c := new(ExternalCommand) c._name = name c._help = help c.server = server commands = append(commands, c) }