+++ /dev/null
-package main
-
-import (
- "github.com/anon55555/mt"
- "github.com/dragonfireclient/hydra-dragonfire/convert"
- "github.com/yuin/gopher-lua"
- "sync"
-)
-
-type Pkts struct {
- client *Client
- mu sync.Mutex
- wildcard bool
- subscribed map[string]struct{}
- userdata *lua.LUserData
-}
-
-var pktsFuncs = map[string]lua.LGFunction{
- "subscribe": l_pkts_subscribe,
- "unsubscribe": l_pkts_unsubscribe,
- "wildcard": l_pkts_wildcard,
-}
-
-type EventPkt struct {
- pktType string
- pktData *mt.Pkt
-}
-
-func (evt EventPkt) handle(l *lua.LState, val lua.LValue) {
- l.SetField(val, "type", lua.LString("pkt"))
- l.SetField(val, "pkt_type", lua.LString(evt.pktType))
- l.SetField(val, "pkt_data", convert.PushPkt(l, evt.pktData))
-}
-
-func getPkts(l *lua.LState) *Pkts {
- return l.CheckUserData(1).Value.(*Pkts)
-}
-
-func (pkts *Pkts) create(client *Client, l *lua.LState) {
- pkts.client = client
- pkts.wildcard = false
- pkts.subscribed = map[string]struct{}{}
- pkts.userdata = l.NewUserData()
- pkts.userdata.Value = pkts
- l.SetMetatable(pkts.userdata, l.GetTypeMetatable("hydra.pkts"))
-}
-
-func (pkts *Pkts) push() lua.LValue {
- return pkts.userdata
-}
-
-func (pkts *Pkts) connect() {
-}
-
-func (pkts *Pkts) process(pkt *mt.Pkt) {
- pktType := string(convert.PushPktType(pkt))
-
- pkts.mu.Lock()
- _, subscribed := pkts.subscribed[pktType]
- pkts.mu.Unlock()
-
- if subscribed || pkts.wildcard {
- pkts.client.queue <- EventPkt{pktType: pktType, pktData: pkt}
- }
-}
-
-func l_pkts_subscribe(l *lua.LState) int {
- pkts := getPkts(l)
- n := l.GetTop()
-
- pkts.mu.Lock()
- defer pkts.mu.Unlock()
-
- for i := 2; i <= n; i++ {
- pkts.subscribed[l.CheckString(i)] = struct{}{}
- }
-
- return 0
-}
-
-func l_pkts_unsubscribe(l *lua.LState) int {
- pkts := getPkts(l)
- n := l.GetTop()
-
- pkts.mu.Lock()
- defer pkts.mu.Unlock()
-
- for i := 2; i <= n; i++ {
- delete(pkts.subscribed, l.CheckString(i))
- }
-
- return 0
-}
-
-func l_pkts_wildcard(l *lua.LState) int {
- pkts := getPkts(l)
- pkts.wildcard = l.ToBool(2)
- return 0
-}