84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package steam
 | |
| 
 | |
| import (
 | |
| 	. "github.com/Philipp15b/go-steam/protocol"
 | |
| 	. "github.com/Philipp15b/go-steam/protocol/protobuf"
 | |
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang"
 | |
| 	. "github.com/Philipp15b/go-steam/steamid"
 | |
| 	"github.com/golang/protobuf/proto"
 | |
| )
 | |
| 
 | |
| // Provides access to the Steam client's part of Steam Trading, that is bootstrapping
 | |
| // the trade.
 | |
| // The trade itself is not handled by the Steam client itself, but it's a part of
 | |
| // the Steam website.
 | |
| //
 | |
| // You'll receive a TradeProposedEvent when a friend proposes a trade. You can accept it with
 | |
| // the RespondRequest method. You can request a trade yourself with RequestTrade.
 | |
| type Trading struct {
 | |
| 	client *Client
 | |
| }
 | |
| 
 | |
| type TradeRequestId uint32
 | |
| 
 | |
| func (t *Trading) HandlePacket(packet *Packet) {
 | |
| 	switch packet.EMsg {
 | |
| 	case EMsg_EconTrading_InitiateTradeProposed:
 | |
| 		msg := new(CMsgTrading_InitiateTradeRequest)
 | |
| 		packet.ReadProtoMsg(msg)
 | |
| 		t.client.Emit(&TradeProposedEvent{
 | |
| 			RequestId: TradeRequestId(msg.GetTradeRequestId()),
 | |
| 			Other:     SteamId(msg.GetOtherSteamid()),
 | |
| 		})
 | |
| 	case EMsg_EconTrading_InitiateTradeResult:
 | |
| 		msg := new(CMsgTrading_InitiateTradeResponse)
 | |
| 		packet.ReadProtoMsg(msg)
 | |
| 		t.client.Emit(&TradeResultEvent{
 | |
| 			RequestId: TradeRequestId(msg.GetTradeRequestId()),
 | |
| 			Response:  EEconTradeResponse(msg.GetResponse()),
 | |
| 			Other:     SteamId(msg.GetOtherSteamid()),
 | |
| 
 | |
| 			NumDaysSteamGuardRequired:            msg.GetSteamguardRequiredDays(),
 | |
| 			NumDaysNewDeviceCooldown:             msg.GetNewDeviceCooldownDays(),
 | |
| 			DefaultNumDaysPasswordResetProbation: msg.GetDefaultPasswordResetProbationDays(),
 | |
| 			NumDaysPasswordResetProbation:        msg.GetPasswordResetProbationDays(),
 | |
| 		})
 | |
| 	case EMsg_EconTrading_StartSession:
 | |
| 		msg := new(CMsgTrading_StartSession)
 | |
| 		packet.ReadProtoMsg(msg)
 | |
| 		t.client.Emit(&TradeSessionStartEvent{
 | |
| 			Other: SteamId(msg.GetOtherSteamid()),
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Requests a trade. You'll receive a TradeResultEvent if the request fails or
 | |
| // if the friend accepted the trade.
 | |
| func (t *Trading) RequestTrade(other SteamId) {
 | |
| 	t.client.Write(NewClientMsgProtobuf(EMsg_EconTrading_InitiateTradeRequest, &CMsgTrading_InitiateTradeRequest{
 | |
| 		OtherSteamid: proto.Uint64(uint64(other)),
 | |
| 	}))
 | |
| }
 | |
| 
 | |
| // Responds to a TradeProposedEvent.
 | |
| func (t *Trading) RespondRequest(requestId TradeRequestId, accept bool) {
 | |
| 	var resp uint32
 | |
| 	if accept {
 | |
| 		resp = 0
 | |
| 	} else {
 | |
| 		resp = 1
 | |
| 	}
 | |
| 
 | |
| 	t.client.Write(NewClientMsgProtobuf(EMsg_EconTrading_InitiateTradeResponse, &CMsgTrading_InitiateTradeResponse{
 | |
| 		TradeRequestId: proto.Uint32(uint32(requestId)),
 | |
| 		Response:       proto.Uint32(resp),
 | |
| 	}))
 | |
| }
 | |
| 
 | |
| // This cancels a request made with RequestTrade.
 | |
| func (t *Trading) CancelRequest(other SteamId) {
 | |
| 	t.client.Write(NewClientMsgProtobuf(EMsg_EconTrading_CancelTradeRequest, &CMsgTrading_CancelTradeRequest{
 | |
| 		OtherSteamid: proto.Uint64(uint64(other)),
 | |
| 	}))
 | |
| }
 | 
