github.com/GeniusesGroup/libgo@v0.0.0-20220929090155-5ff932cb408e/srpc/frame-call-service.go (about)

     1  /* For license and copyright information please see LEGAL file in repository */
     2  
     3  package srpc
     4  
     5  import (
     6  	"../protocol"
     7  	"../syllab"
     8  )
     9  
    10  /*
    11  type serviceFrame struct {
    12  	Length     [2]byte // including the header fields
    13  	ServiceID  uint64
    14  	CompressID uint64
    15  	Time       int64 // It is used to match the request and response and drop if TTL
    16  	Payload    []byte
    17  }
    18  */
    19  type serviceFrame []byte
    20  
    21  func (f serviceFrame) Length() uint16     { return syllab.GetUInt16(f, 0) }
    22  func (f serviceFrame) ServiceID() uint64  { return syllab.GetUInt64(f, 2) }
    23  func (f serviceFrame) CompressID() uint64 { return syllab.GetUInt64(f, 10) }
    24  func (f serviceFrame) Time() int64        { return syllab.GetInt64(f, 18) }
    25  func (f serviceFrame) Payload() []byte    { return f[26:f.Length()] }
    26  func (f serviceFrame) NextFrame() []byte  { return f[f.Length():] }
    27  
    28  // callService use to call a service without need to open any stream.
    29  // It can also use when service request data is smaller than network MTU.
    30  // Or use for time sensitive data like audio and video that streams shape in app layer
    31  func callService(conn protocol.Connection, frame serviceFrame) (err protocol.Error) {
    32  	// var serviceID uint32 = serviceFrame.ServiceID()
    33  	// TODO:::
    34  	return
    35  }