當前位置: 首頁>>代碼示例>>Golang>>正文


Golang PacketReader.Read16方法代碼示例

本文整理匯總了Golang中github.com/spinlock/xserver/pkg/xserver/xio.PacketReader.Read16方法的典型用法代碼示例。如果您正苦於以下問題:Golang PacketReader.Read16方法的具體用法?Golang PacketReader.Read16怎麽用?Golang PacketReader.Read16使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在github.com/spinlock/xserver/pkg/xserver/xio.PacketReader的用法示例。


在下文中一共展示了PacketReader.Read16方法的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: OnRawMessage

func (h *streamHandler) OnRawMessage(code uint8, r *xio.PacketReader) error {
    if h.fw.closed {
        return errors.New("stream.onRawMessage.closed")
    }
    if flag, err := r.Read16(); err != nil {
        return errors.New("stream.onRawMessage.read flag")
    } else if flag != 0x22 {
        return errors.New("stream.onRawMessage.unknown flag")
    }
    return nil
}
開發者ID:Yuhang,項目名稱:xserver,代碼行數:11,代碼來源:stream.go

示例2: OnRawMessage

func (h *connHandler) OnRawMessage(code uint8, r *xio.PacketReader) error {
    if h.fw.closed {
        return errors.New("conn.onRawMessage.closed")
    }
    if flag, err := r.Read16(); err != nil {
        return errors.New("conn.onRawMessage.read flag")
    } else if flag != 0x03 {
        return errors.New("conn.onRawMessage.unkonwn flag")
    }
    if sid, err := r.Read32(); err != nil {
        return errors.New("conn.onRawMessage.read sid")
    } else if sid != 0 {
        if err := h.newSetBufferTime(sid); err != nil {
            return errors.New("conn.onRawMessage.setbuffertime response")
        }
    }
    return nil
}
開發者ID:Yuhang,項目名稱:xserver,代碼行數:18,代碼來源:conn.go

示例3: ParseRequestMessage

func ParseRequestMessage(r *xio.PacketReader) (*RequestMessage, error) {
    var err error
    code := uint8(0)
    if code, err = r.Read8(); err != nil {
        return nil, errors.New("message.read code")
    } else if code == 0xff {
        return nil, EOP
    }
    var size uint16
    if size, err = r.Read16(); err != nil {
        return nil, errors.New("message.read size")
    }
    rlen := r.Len()
    mlen := int(size)
    if rlen < mlen {
        return nil, errors.New("message.bad content length")
    } else {
        data := r.Bytes()[:mlen]
        if err := r.Skip(mlen); err != nil {
            return nil, errors.New("message.skip forward")
        }
        return &RequestMessage{code, xio.NewPacketReader(data)}, nil
    }
}
開發者ID:Yuhang,項目名稱:xserver,代碼行數:24,代碼來源:request.go

示例4: handle

func (h *Handshake) handle(r *xio.PacketReader) (*packet, error) {
    if marker, err := r.Read8(); err != nil {
        return nil, errors.New("packet.read marker")
    } else {
        if _, err := r.Read16(); err != nil {
            return nil, errors.New("packet.read time")
        }
        if marker != 0x0b {
            counts.Count("handshake.marker.unknown", 1)
            return nil, errors.New(fmt.Sprintf("packet.unknown marker = 0x%02x", marker))
        }
    }
    if msg, err := rtmfp.ParseRequestMessage(r); err != nil {
        return nil, err
    } else {
        switch msg.Code {
        default:
            counts.Count("handshake.code.unknown", 1)
            return nil, errors.New(fmt.Sprintf("message.unknown code = 0x%02x", msg.Code))
        case 0x30:
            if rsp, err := h.handleHello(msg.PacketReader); err != nil {
                counts.Count("handshake.hello.error", 1)
                return nil, err
            } else {
                return &packet{0, rsp}, nil
            }
        case 0x38:
            if rsp, yid, err := h.handleAssign(msg.PacketReader); err != nil {
                counts.Count("handshake.assign.error", 1)
                return nil, err
            } else {
                return &packet{yid, rsp}, nil
            }
        }
    }
}
開發者ID:Yuhang,項目名稱:xserver,代碼行數:36,代碼來源:handshake.go

示例5: handle

func (s *Session) handle(r *xio.PacketReader) error {
    if marker, err := r.Read8(); err != nil {
        return errors.New("packet.read marker")
    } else {
        if s.stmptime, err = r.Read16(); err != nil {
            return errors.New("packet.read time")
        }
        switch marker | 0xf0 {
        default:
            counts.Count("session.marker.unknown", 1)
            return errors.New(fmt.Sprintf("packet.unknown marker = 0x%02x", marker))
        case 0xfd:
            if _, err = r.Read16(); err != nil {
                return errors.New("packet.read ping time")
            }
        case 0xf9:
        }
    }

    msglist := list.New()
    for r.Len() != 0 {
        if msg, err := rtmfp.ParseRequestMessage(r); err != nil {
            if err != rtmfp.EOP {
                return err
            }
            break
        } else {
            msglist.PushBack(msg)
        }
    }

    var lastreq *flowRequest = nil
    for e := msglist.Front(); e != nil; e = e.Next() {
        msg := e.Value.(*rtmfp.RequestMessage)
        if msg.Code != 0x11 && lastreq != nil {
            if err := s.handleFlowRequest(lastreq); err != nil {
                return err
            }
            lastreq = nil
        }
        switch msg.Code {
        default:
            s.Close()
            counts.Count("session.code.unknown", 1)
            return errors.New(fmt.Sprintf("message.close code = 0x%02x", msg.Code))
        case 0x4c:
            s.Close()
            counts.Count("session.code.close", 1)
            return nil
        case 0x01:
            s.send(newKeepAliveResponse(true))
        case 0x41:
        case 0x5e:
            if req, err := parseFlowErrorRequest(msg.PacketReader); err != nil {
                counts.Count("session.parse5e.error", 1)
                return err
            } else if fw := s.writers[req.fid]; fw != nil {
                fw.reader.handler.OnClose()
            } else {
                xlog.OutLog.Printf("[session]: xid = %d, writer.fid = %d, flow not found 0x5e\n", s.xid, req.fid)
            }
        case 0x51:
            if req, err := parseFlowAckRequest(msg.PacketReader); err != nil {
                counts.Count("session.parse51.error", 1)
                return err
            } else if fw := s.writers[req.fid]; fw != nil {
                fw.CommitAck(req.cnt, req.ack)
            } else {
                xlog.OutLog.Printf("[session]: xid = %d, writer.fid = %d, flow not found 0x51\n", s.xid, req.fid)
            }
        case 0x10:
            if req, err := parseFlowRequest(msg.PacketReader); err != nil {
                counts.Count("session.parse10.error", 1)
                return err
            } else {
                lastreq = req
            }
        case 0x11:
            if req, err := parseFlowRequestSlice(msg.PacketReader); err != nil {
                counts.Count("session.parse11.error", 1)
                return err
            } else if lastreq != nil {
                lastreq.AddSlice(req)
            } else {
                xlog.OutLog.Printf("[session]: xid = %d, not following message\n", s.xid)
            }
        }
    }
    if lastreq != nil {
        return s.handleFlowRequest(lastreq)
    }
    return nil
}
開發者ID:Yuhang,項目名稱:xserver,代碼行數:93,代碼來源:session.go


注:本文中的github.com/spinlock/xserver/pkg/xserver/xio.PacketReader.Read16方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。