1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-11-09 00:14:57 +00:00
arikawa/internal/moreatomic
diamondburned 54cadd2f45 gateway: Refactor for a better concurrent API
This commit refactors the whole package gateway as well as utils/ws
(formerly utils/wsutil) and voice/voicegateway. The new refactor
utilizes a design pattern involving a concurrent loop and an arriving
event channel.

An additional change was made to the way gateway events are typed.
Before, pretty much any type will satisfy a gateway event type, since
the actual type was just interface{}. The new refactor defines a
concrete interface that events can implement:

    type Event interface {
        Op() OpCode
        EventType() EventType
    }

Using this interface, the user can easily add custom gateway events
independently of the library without relying on string maps. This adds a
lot of type safety into the library and makes type-switching on Event
types much more reasonable.

Gateway error callbacks are also almost entirely removed in favor of
custom gateway events. A catch-all can easily be added like this:

    s.AddHandler(func(err error) {
        log.Println("gateway error:, err")
    })
2021-12-14 13:49:34 -08:00
..
syncmod Moreatomic: Replaced invalid mutex with modified sync.Map impl 2020-12-19 02:35:13 -08:00
bool.go gateway: Refactor for a better concurrent API 2021-12-14 13:49:34 -08:00
int.go Gateway: Refactor, v8 user struct updates 2020-11-28 17:22:03 -08:00
mutex.go shard: Remake shard manager (#226) 2021-06-14 15:22:55 -07:00
snowflake.go *: Migrated Go Modules to v3 2021-06-01 19:59:01 -07:00
snowflake_set.go *: Migrated Go Modules to v3 2021-06-01 19:59:01 -07:00
string.go *: Separate utils and internal (#129) 2020-07-29 16:58:33 -07:00
syncmap.go *: Migrated Go Modules to v3 2021-06-01 19:59:01 -07:00
time.go *: Separate utils and internal (#129) 2020-07-29 16:58:33 -07:00