forked from lug/matterbridge
		
	
		
			
				
	
	
		
			222 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package protocol
 | |
| 
 | |
| import (
 | |
| 	"github.com/golang/protobuf/proto"
 | |
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang"
 | |
| 	. "github.com/Philipp15b/go-steam/steamid"
 | |
| 	"io"
 | |
| )
 | |
| 
 | |
| // Interface for all messages, typically outgoing. They can also be created by
 | |
| // using the Read* methods in a PacketMsg.
 | |
| type IMsg interface {
 | |
| 	Serializer
 | |
| 	IsProto() bool
 | |
| 	GetMsgType() EMsg
 | |
| 	GetTargetJobId() JobId
 | |
| 	SetTargetJobId(JobId)
 | |
| 	GetSourceJobId() JobId
 | |
| 	SetSourceJobId(JobId)
 | |
| }
 | |
| 
 | |
| // Interface for client messages, i.e. messages that are sent after logging in.
 | |
| // ClientMsgProtobuf and ClientMsg implement this.
 | |
| type IClientMsg interface {
 | |
| 	IMsg
 | |
| 	GetSessionId() int32
 | |
| 	SetSessionId(int32)
 | |
| 	GetSteamId() SteamId
 | |
| 	SetSteamId(SteamId)
 | |
| }
 | |
| 
 | |
| // Represents a protobuf backed client message with session data.
 | |
| type ClientMsgProtobuf struct {
 | |
| 	Header *MsgHdrProtoBuf
 | |
| 	Body   proto.Message
 | |
| }
 | |
| 
 | |
| func NewClientMsgProtobuf(eMsg EMsg, body proto.Message) *ClientMsgProtobuf {
 | |
| 	hdr := NewMsgHdrProtoBuf()
 | |
| 	hdr.Msg = eMsg
 | |
| 	return &ClientMsgProtobuf{
 | |
| 		Header: hdr,
 | |
| 		Body:   body,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) IsProto() bool {
 | |
| 	return true
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) GetMsgType() EMsg {
 | |
| 	return NewEMsg(uint32(c.Header.Msg))
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) GetSessionId() int32 {
 | |
| 	return c.Header.Proto.GetClientSessionid()
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) SetSessionId(session int32) {
 | |
| 	c.Header.Proto.ClientSessionid = &session
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) GetSteamId() SteamId {
 | |
| 	return SteamId(c.Header.Proto.GetSteamid())
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) SetSteamId(s SteamId) {
 | |
| 	c.Header.Proto.Steamid = proto.Uint64(uint64(s))
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) GetTargetJobId() JobId {
 | |
| 	return JobId(c.Header.Proto.GetJobidTarget())
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) SetTargetJobId(job JobId) {
 | |
| 	c.Header.Proto.JobidTarget = proto.Uint64(uint64(job))
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) GetSourceJobId() JobId {
 | |
| 	return JobId(c.Header.Proto.GetJobidSource())
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) SetSourceJobId(job JobId) {
 | |
| 	c.Header.Proto.JobidSource = proto.Uint64(uint64(job))
 | |
| }
 | |
| 
 | |
| func (c *ClientMsgProtobuf) Serialize(w io.Writer) error {
 | |
| 	err := c.Header.Serialize(w)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	body, err := proto.Marshal(c.Body)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	_, err = w.Write(body)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| // Represents a struct backed client message.
 | |
| type ClientMsg struct {
 | |
| 	Header  *ExtendedClientMsgHdr
 | |
| 	Body    MessageBody
 | |
| 	Payload []byte
 | |
| }
 | |
| 
 | |
| func NewClientMsg(body MessageBody, payload []byte) *ClientMsg {
 | |
| 	hdr := NewExtendedClientMsgHdr()
 | |
| 	hdr.Msg = body.GetEMsg()
 | |
| 	return &ClientMsg{
 | |
| 		Header:  hdr,
 | |
| 		Body:    body,
 | |
| 		Payload: payload,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) IsProto() bool {
 | |
| 	return true
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) GetMsgType() EMsg {
 | |
| 	return c.Header.Msg
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) GetSessionId() int32 {
 | |
| 	return c.Header.SessionID
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) SetSessionId(session int32) {
 | |
| 	c.Header.SessionID = session
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) GetSteamId() SteamId {
 | |
| 	return c.Header.SteamID
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) SetSteamId(s SteamId) {
 | |
| 	c.Header.SteamID = s
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) GetTargetJobId() JobId {
 | |
| 	return JobId(c.Header.TargetJobID)
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) SetTargetJobId(job JobId) {
 | |
| 	c.Header.TargetJobID = uint64(job)
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) GetSourceJobId() JobId {
 | |
| 	return JobId(c.Header.SourceJobID)
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) SetSourceJobId(job JobId) {
 | |
| 	c.Header.SourceJobID = uint64(job)
 | |
| }
 | |
| 
 | |
| func (c *ClientMsg) Serialize(w io.Writer) error {
 | |
| 	err := c.Header.Serialize(w)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	err = c.Body.Serialize(w)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	_, err = w.Write(c.Payload)
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| type Msg struct {
 | |
| 	Header  *MsgHdr
 | |
| 	Body    MessageBody
 | |
| 	Payload []byte
 | |
| }
 | |
| 
 | |
| func NewMsg(body MessageBody, payload []byte) *Msg {
 | |
| 	hdr := NewMsgHdr()
 | |
| 	hdr.Msg = body.GetEMsg()
 | |
| 	return &Msg{
 | |
| 		Header:  hdr,
 | |
| 		Body:    body,
 | |
| 		Payload: payload,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (m *Msg) GetMsgType() EMsg {
 | |
| 	return m.Header.Msg
 | |
| }
 | |
| 
 | |
| func (m *Msg) IsProto() bool {
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| func (m *Msg) GetTargetJobId() JobId {
 | |
| 	return JobId(m.Header.TargetJobID)
 | |
| }
 | |
| 
 | |
| func (m *Msg) SetTargetJobId(job JobId) {
 | |
| 	m.Header.TargetJobID = uint64(job)
 | |
| }
 | |
| 
 | |
| func (m *Msg) GetSourceJobId() JobId {
 | |
| 	return JobId(m.Header.SourceJobID)
 | |
| }
 | |
| 
 | |
| func (m *Msg) SetSourceJobId(job JobId) {
 | |
| 	m.Header.SourceJobID = uint64(job)
 | |
| }
 | |
| 
 | |
| func (m *Msg) Serialize(w io.Writer) error {
 | |
| 	err := m.Header.Serialize(w)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	err = m.Body.Serialize(w)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	_, err = w.Write(m.Payload)
 | |
| 	return err
 | |
| }
 | 
