本文整理汇总了Golang中cham/cham.Service类的典型用法代码示例。如果您正苦于以下问题:Golang Service类的具体用法?Golang Service怎么用?Golang Service使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Service类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: clientDispatch
func clientDispatch(service *cham.Service, args ...interface{}) cham.Dispatch {
return func(session int32, source cham.Address, ptype uint8, args ...interface{}) []interface{} {
sessionid := args[0].(uint32)
gt := args[1].(uint8)
time.Sleep(time.Second * 5)
switch gt {
case OnOpen:
fmt.Println("OnOpen ", sessionid)
case OnClose:
fmt.Println("OnClose ", sessionid, args[2:])
case OnPong:
fmt.Println("OnPong ", sessionid, args[2])
case OnMessage:
data := string(args[2].([]byte))
fmt.Println("OnMessage", sessionid, data)
if data == "hello" {
service.Notify("gate", cham.PTYPE_RESPONSE, sessionid, []byte("world"+strconv.Itoa(int(sessionid))))
} else if data == "WebSocket" {
service.Notify("gate", cham.PTYPE_RESPONSE, sessionid, []byte("websocket reply"+strconv.Itoa(int(sessionid))))
}
// go func() {
// time.Sleep(time.Second * 2)
// fmt.Println("kick")
// service.Notify("gate", cham.PTYPE_GO, KICK, sessionid)
// }()
}
return cham.NORET
}
}
示例2: Start
//service self
func Start(service *cham.Service, args ...interface{}) cham.Dispatch {
log.Infoln("New Service ", service.String())
mul := new(Multicast)
mul.channel = 0
mul.groups = make(map[uint32]map[cham.Address]cham.NULL, DEFAULT_GROUP_SIZE)
return func(session int32, source cham.Address, ptype uint8, args ...interface{}) []interface{} {
cmd := args[0].(uint8)
channel := args[1].(uint32)
addr := args[2].(cham.Address)
result := cham.NORET
switch cmd {
case NEW:
result = cham.Ret(mul.new(addr))
case SUB:
mul.sub(addr, channel)
case PUB:
mul.pub(addr, channel, args[3:]...)
case UNSUB:
mul.unsub(addr, channel)
case DEL:
mul.del(channel)
}
return result
}
}
示例3: New
//Channel base on a service, args[0] is N worker to dispatch msg
func New(service *cham.Service, channel uint32, start cham.Start, args ...interface{}) *Channel {
multicast = cham.UniqueService("multicast", Start, args...)
if channel == 0 {
channel = service.Call(multicast, cham.PTYPE_GO, NEW, uint32(0), service.Addr)[0].(uint32)
}
service.RegisterProtocol(cham.PTYPE_MULTICAST, start)
c := &Channel{service, channel}
return c
}
示例4: brokerStart
func brokerStart(service *cham.Service, args ...interface{}) cham.Dispatch {
log.Infoln("New Service ", service.String())
um := args[0].(*usermanager.UserManager)
return func(session int32, source cham.Address, ptype uint8, args ...interface{}) []interface{} {
cmd := args[0].(uint8)
switch cmd {
case user.DELETE_USER:
openid := args[1].(string)
um.Delete(openid)
}
return cham.NORET
}
}
示例5: Start
func Start(service *cham.Service, args ...interface{}) cham.Dispatch {
log.Infoln("New Service ", service.String())
gate := New(0, service)
return func(session int32, source cham.Address, ptype uint8, args ...interface{}) []interface{} {
cmd := args[0].(uint8)
result := cham.NORET
switch cmd {
case OPEN:
gate.Source = source
service.RegisterProtocol(cham.PTYPE_RESPONSE, ResponseStart, gate)
gate.open(args[1].(*Conf))
case KICK:
gate.kick(args[1].(uint32))
}
return result
}
}
示例6: Start
func Start(service *cham.Service, args ...interface{}) cham.Dispatch {
log.Infoln("New Service ", service.String())
openid, session := args[0].(string), args[1].(uint32)
user, err := newUser(service, &model.UserModel{Openid: openid}, session)
if err != nil {
log.Errorln("Service ", service.String(), "init error,", err.Error())
service.Stop()
}
return func(session int32, source cham.Address, ptype uint8, args ...interface{}) []interface{} {
cmd := args[0].(uint8)
switch cmd {
case CHANGE_SESSION:
user.session = args[1].(uint32)
}
return cham.NORET
}
}