diff options
Diffstat (limited to 'vendor/github.com/Philipp15b/go-steam/trade/actions.go')
-rw-r--r-- | vendor/github.com/Philipp15b/go-steam/trade/actions.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/vendor/github.com/Philipp15b/go-steam/trade/actions.go b/vendor/github.com/Philipp15b/go-steam/trade/actions.go new file mode 100644 index 00000000..e9301940 --- /dev/null +++ b/vendor/github.com/Philipp15b/go-steam/trade/actions.go @@ -0,0 +1,84 @@ +package trade + +import ( + "github.com/Philipp15b/go-steam/economy/inventory" + "github.com/Philipp15b/go-steam/trade/tradeapi" + "time" +) + +type Slot uint + +func (t *Trade) action(status *tradeapi.Status, err error) error { + if err != nil { + return err + } + t.onStatus(status) + return nil +} + +// Returns the next batch of events to process. These can be queued from calls to methods +// like `AddItem` or, if there are no queued events, from a new HTTP request to Steam's API (blocking!). +// If the latter is the case, this method may also sleep before the request +// to conform to the polling interval of the official Steam client. +func (t *Trade) Poll() ([]interface{}, error) { + if t.queuedEvents != nil { + return t.Events(), nil + } + + if d := time.Since(t.lastPoll); d < pollTimeout { + time.Sleep(pollTimeout - d) + } + t.lastPoll = time.Now() + + err := t.action(t.api.GetStatus()) + if err != nil { + return nil, err + } + + return t.Events(), nil +} + +func (t *Trade) GetTheirInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) { + return inventory.GetFullInventory(func() (*inventory.PartialInventory, error) { + return t.api.GetForeignInventory(contextId, appId, nil) + }, func(start uint) (*inventory.PartialInventory, error) { + return t.api.GetForeignInventory(contextId, appId, &start) + }) +} + +func (t *Trade) GetOwnInventory(contextId uint64, appId uint32) (*inventory.Inventory, error) { + return t.api.GetOwnInventory(contextId, appId) +} + +func (t *Trade) GetMain() (*tradeapi.Main, error) { + return t.api.GetMain() +} + +func (t *Trade) AddItem(slot Slot, item *Item) error { + return t.action(t.api.AddItem(uint(slot), item.AssetId, item.ContextId, item.AppId)) +} + +func (t *Trade) RemoveItem(slot Slot, item *Item) error { + return t.action(t.api.RemoveItem(uint(slot), item.AssetId, item.ContextId, item.AppId)) +} + +func (t *Trade) Chat(message string) error { + return t.action(t.api.Chat(message)) +} + +func (t *Trade) SetCurrency(amount uint, currency *Currency) error { + return t.action(t.api.SetCurrency(amount, currency.CurrencyId, currency.ContextId, currency.AppId)) +} + +func (t *Trade) SetReady(ready bool) error { + return t.action(t.api.SetReady(ready)) +} + +// This may only be called after a successful `SetReady(true)`. +func (t *Trade) Confirm() error { + return t.action(t.api.Confirm()) +} + +func (t *Trade) Cancel() error { + return t.action(t.api.Cancel()) +} |