本文整理汇总了Golang中gopkg/in/igm/sockjs-go/v2/sockjs.Session.Recv方法的典型用法代码示例。如果您正苦于以下问题:Golang Session.Recv方法的具体用法?Golang Session.Recv怎么用?Golang Session.Recv使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gopkg/in/igm/sockjs-go/v2/sockjs.Session
的用法示例。
在下文中一共展示了Session.Recv方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: echoHandler
func echoHandler(session sockjs.Session) {
log.Println("new sockjs session established")
var closedSession = make(chan struct{})
chat.Publish("[info] new participant joined chat")
defer chat.Publish("[info] participant left chat")
go func() {
reader, _ := chat.SubChannel(nil)
for {
select {
case <-closedSession:
return
case msg := <-reader:
if err := session.Send(msg.(string)); err != nil {
return
}
}
}
}()
for {
if msg, err := session.Recv(); err == nil {
chat.Publish(msg)
continue
}
break
}
close(closedSession)
log.Println("sockjs session closed")
}
示例2: authenticate
func authenticate(s sockjs.Session, ctx *context.Context) (*store.Session, error) {
val, err := s.Recv()
if err != nil {
return nil, err
}
var req struct {
Type string
Token string
}
if err := json.Unmarshal([]byte(val), &req); err != nil {
return nil, err
}
if req.Type != typeConnect {
return nil, fmt.Errorf("hub: expected \"connect\" got \"%s\"", req.Type)
}
sess, err := auth.SessionFromToken(ctx, req.Token)
if err != nil {
return nil, err
}
if err := send(s, map[string]string{
"Type": typeConnect,
}); err != nil {
return nil, err
}
return sess, nil
}
示例3: quoridorHandler
func quoridorHandler(session sockjs.Session) {
for {
if msg, err := session.Recv(); err == nil {
handleMsg(session, msg)
continue
}
break
}
}
示例4: Read
func (s *SockJS) Read(session sockjs.Session) {
for {
if raw, err := session.Recv(); err == nil {
s.processMessage(raw, session)
} else {
break
}
}
}
示例5: echoHandler
func echoHandler(session sockjs.Session) {
log.Println("new sockjs session established")
for {
if msg, err := session.Recv(); err == nil {
session.Send(msg)
continue
}
break
}
log.Println("sockjs session closed")
}
示例6: echoHandler
func echoHandler(conn sockjs.Session) {
log.Println("New connection created")
for {
if msg, err := conn.Recv(); err != nil {
break
} else {
if err := conn.Send(msg); err != nil {
break
}
}
}
log.Println("Sessionection closed")
}
示例7: Handler
func (ws *Ws) Handler(session sockjs.Session) {
for {
if msg, err := session.Recv(); err == nil {
log.Printf("ws: received: %v", msg)
message := map[string]interface{}{}
err = json.Unmarshal([]byte(msg), &message)
if err != nil {
respondError(session, err.Error())
continue
}
command, ok := message["cmd"]
if !ok {
respondError(session, "`cmd` field must be specified!")
continue
}
commandName, ok := command.(string)
if !ok {
respondError(session, "`cmd` must be a string")
continue
}
params, ok := message["params"]
if !ok {
respondError(session, "`params` field must be specified!")
continue
}
paramsMap, ok := params.(map[string]interface{})
if !ok {
respondError(session, "`params` must be an object!")
continue
}
result, err := ws.Run(commandName, paramsMap)
if err != nil {
respondError(session, err.Error())
continue
}
response, err := json.Marshal(result)
if err != nil {
panic(err)
}
session.Send(string(response))
} else {
log.Println(err)
break
}
}
}
示例8: echoHandler
func echoHandler(session sockjs.Session) {
for {
if msg, err := session.Recv(); err == nil {
session.Send(msg)
continue
}
break
}
}
示例9: sockjsHandler
func sockjsHandler(client sockjs.Session) {
//new client connected
for {
if msg, err := client.Recv(); err == nil {
//message received
if strings.HasPrefix(msg, "join") {
room, ok := clientToRooms[client]
if ok {
removeClientFromRoom(room, client)
}
roomId, err := strconv.Atoi(strings.TrimPrefix(msg, "join"))
if err != nil {
continue
}
room, ok = rooms[roomId]
//create new room if not exists
if !ok {
room = ng.NewRoom(roomId, 2)
rooms[roomId] = room
}
clientToRooms[client] = room
room.AddClient(client)
} else if room, ok := clientToRooms[client]; ok {
room.Send(msg, client)
}
} else {
break
}
}
if room, ok := clientToRooms[client]; ok {
removeClientFromRoom(room, client)
}
}
示例10: echoHandler
func echoHandler(session sockjs.Session) {
log.Println("new sockjs session established")
var closedSession = make(chan struct{})
session.Send(session.ID())
go func() {
reader, _ := chat.SubChannel(nil)
for {
select {
case <-closedSession:
return
case msg := <-reader:
if err := session.Send(msg.(string)); err != nil {
return
}
}
}
}()
for {
if msg, err := session.Recv(); err == nil {
data := &WSDataSchema{}
buf := bytes.NewBufferString(msg)
err = json.Unmarshal(buf.Bytes(), data)
if err == nil {
_type := data.Type
_endpoint := data.Endpoint
_id := data.Id
if _type == "container" {
session.Send(_endpoint + _id)
break
}
}
chat.Publish(msg)
//session.Send(msg)
continue
}
break
}
close(closedSession)
log.Println("sockjs session closed")
}
示例11: sockJSHandler
// sockJSHandler called when new client connection comes to SockJS endpoint.
func (app *Application) sockJSHandler(s sockjs.Session) {
c, err := newClient(app, s)
if err != nil {
logger.ERROR.Println(err)
return
}
defer c.clean()
logger.INFO.Printf("new SockJS session established with uid %s\n", c.uid())
for {
if msg, err := s.Recv(); err == nil {
err = c.message([]byte(msg))
if err != nil {
logger.ERROR.Println(err)
s.Close(CloseStatus, "error handling message")
break
}
continue
}
break
}
}
示例12: Chat
func Chat(session sockjs.Session) {
glog.Info("Session started")
sessionId := session.ID()
chatSession := &ChatSession{
Id: sessionId,
IsReady: false,
Session: &session,
}
ChatSessions.Set(sessionId, chatSession)
acceptedTypes := &map[string]string{
"image/jpeg": ".jpg",
"image/jpg": ".jpg",
"image/png": ".png",
"image/gif": ".gif",
}
ticker := time.NewTicker(time.Second)
// Not too nice, will be refactored later...
online := func() {
ready, chatting := ChatSessions.GetNumberOfReadyAndChatting()
msg := &ChatMessage{
"event": "online",
"r": ready,
"c": chatting,
}
out, _ := json.Marshal(msg)
body := string(out)
session.Send(body)
}
go func() {
for _ = range ticker.C {
online()
}
}()
online()
for {
if msg, err := session.Recv(); err == nil {
var data ChatMessage
json.Unmarshal([]byte(msg), &data)
switch data["event"] {
case "ready":
ChatReady(sessionId, data["region"].(string))
case "typing":
ChatSessions.Action(func() {
chatSession.Room.BroadcastOthers(sessionId, "typing", strconv.FormatBool(data["typing"].(bool)))
})
case "send":
ChatSessions.Action(func() {
chatSession.Room.BroadcastOthers(sessionId, "message", data["message"].(string))
})
case "exit":
ChatSessions.Action(func() {
glog.Info("Chat session ended")
chatSession.Room.BroadcastOthers(sessionId, "exit", "")
for i, _ := range chatSession.Room.Sessions {
s := chatSession.Room.Sessions[i]
if s != chatSession {
s.Room = nil
}
//s.IsReady = true
}
chatSession.Room = nil
})
case "picture":
glog.Info("Picture received")
ChatSessions.Action(func() {
chatSession.Room.BroadcastOthers(sessionId, "picturebefore", "true")
dataURL, err := dataurl.DecodeString(data["data"].(string))
if err != nil {
glog.Error("Problem decoding file: ", err)
}
filename := helpers.GetRandomString(8)
mt := dataURL.ContentType()
if ext, ok := (*acceptedTypes)[mt]; ok {
err = ioutil.WriteFile(MediaContent+filename+ext, dataURL.Data, 0644)
if err != nil {
glog.Error("Error saving file: ", err)
}
chatSession.Room.BroadcastOthers(sessionId, "picture", data["data"].(string))
}
})
}
continue
}
break
}
ticker.Stop()
//.........这里部分代码省略.........