Deadlock

August 22, 2026 ยท View on GitHub

Go Reference DeepWiki

Introduction

go-deadlock is a Deadlock client plugin for go-steam.

Games implemented:

Usage

cl := steam.NewClient(...)
dl := deadlock.New(cl, logrus.StandardLogger())

Implementation Progress

  • GC session state management
  • Request tracking (MakeRequest with response matching)
  • SOCache tracking / state management
  • Code generation for API
  • Code generation for events
  • Basic party operations
    • Read party state correctly
    • Implement normal party operations
  • Lobby tracking / state management

SOCache Mechanism

The caching mechanism makes it easy to watch for changes to common objects.

This mechanism is used everywhere, these objects are not exposed in their own events.

import (
	gcmm "github.com/paralin/go-deadlock/protocol"
	"github.com/paralin/go-deadlock/cso"
)

eventCh, eventCancel, err := dl.GetCache().SubscribeType(cso.EconItem)
if err != nil {
    return err
}

defer eventCancel()

itemEvent := <-eventCh
item := itemEvent.Object.(*gcmm.CSOEconItem)

Events for the object type are emitted on the eventCh. Be sure to call eventCancel once you are done with the channel to prevent resource leaks.

The cache object also adds interfaces to get and list the current objects in the cache.

Implementation Generation

This project makes use of a dynamic API generator (apigen) designed to automatically interpret Valve's various naming conventions into a intermediate API scheme representation, which is then converted into Go code.

The base API implementation is generated by the apigen code. Using heuristics, request IDs are matched to response IDs, and events and action-only requests are identified. Some manual tweaking is done in the overrides file.

Next, the API information is used to build a Go code-gen set of implementations around the MakeRequest request tracking mechanism.

This means that ALL of the Deadlock GC API will be available in this codebase, although only some of it is documented.

go-steam Dependency

This library depends on go-steam.