summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/Philipp15b/go-steam/protocol/msg.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/Philipp15b/go-steam/protocol/msg.go')
-rw-r--r--vendor/github.com/Philipp15b/go-steam/protocol/msg.go221
1 files changed, 221 insertions, 0 deletions
diff --git a/vendor/github.com/Philipp15b/go-steam/protocol/msg.go b/vendor/github.com/Philipp15b/go-steam/protocol/msg.go
new file mode 100644
index 00000000..236e6737
--- /dev/null
+++ b/vendor/github.com/Philipp15b/go-steam/protocol/msg.go
@@ -0,0 +1,221 @@
+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
+}