Add Golang skill and reference materials
- Introduced a new skill for Golang, providing comprehensive guidance on writing, debugging, and best practices for Go programming. - Added reference materials including effective Go guidelines, common patterns, and a quick reference cheat sheet to support users in Go development. - Created a skill creator guide to assist in developing new skills with structured templates and resource management. - Implemented scripts for skill initialization and packaging to streamline the skill creation process.
This commit is contained in:
@@ -19,7 +19,7 @@ import (
|
||||
)
|
||||
|
||||
func (l *Listener) HandleEvent(msg []byte) (err error) {
|
||||
log.D.F("handling event: %s", msg)
|
||||
log.D.F("HandleEvent: START handling event: %s", msg)
|
||||
// decode the envelope
|
||||
env := eventenvelope.NewSubmission()
|
||||
log.I.F("HandleEvent: received event message length: %d", len(msg))
|
||||
@@ -28,8 +28,8 @@ func (l *Listener) HandleEvent(msg []byte) (err error) {
|
||||
return
|
||||
}
|
||||
log.I.F(
|
||||
"HandleEvent: successfully unmarshaled event, kind: %d, pubkey: %s",
|
||||
env.E.Kind, hex.Enc(env.E.Pubkey),
|
||||
"HandleEvent: successfully unmarshaled event, kind: %d, pubkey: %s, id: %0x",
|
||||
env.E.Kind, hex.Enc(env.E.Pubkey), env.E.ID,
|
||||
)
|
||||
defer func() {
|
||||
if env != nil && env.E != nil {
|
||||
@@ -344,6 +344,7 @@ func (l *Listener) HandleEvent(msg []byte) (err error) {
|
||||
log.D.F("delivered ephemeral event %0x", env.E.ID)
|
||||
return
|
||||
}
|
||||
log.D.F("processing regular event %0x (kind %d)", env.E.ID, env.E.Kind)
|
||||
|
||||
// check for protected tag (NIP-70)
|
||||
protectedTag := env.E.Tags.GetFirst([]byte("-"))
|
||||
|
||||
@@ -566,9 +566,20 @@ func (l *Listener) HandleReq(msg []byte) (err error) {
|
||||
)
|
||||
var subbedFilters filter.S
|
||||
for _, f := range *env.Filters {
|
||||
// Check if this filter's limit was satisfied
|
||||
limitSatisfied := false
|
||||
if pointers.Present(f.Limit) {
|
||||
if len(events) >= int(*f.Limit) {
|
||||
limitSatisfied = true
|
||||
}
|
||||
}
|
||||
|
||||
if f.Ids.Len() < 1 {
|
||||
cancel = false
|
||||
subbedFilters = append(subbedFilters, f)
|
||||
// Filter has no IDs - keep subscription open unless limit was satisfied
|
||||
if !limitSatisfied {
|
||||
cancel = false
|
||||
subbedFilters = append(subbedFilters, f)
|
||||
}
|
||||
} else {
|
||||
// remove the IDs that we already sent, as it's one less
|
||||
// comparison we have to make.
|
||||
@@ -587,17 +598,16 @@ func (l *Listener) HandleReq(msg []byte) (err error) {
|
||||
if len(notFounds) == 0 {
|
||||
continue
|
||||
}
|
||||
// Check if limit was satisfied
|
||||
if limitSatisfied {
|
||||
continue
|
||||
}
|
||||
// rewrite the filter Ids to remove the ones we already sent
|
||||
f.Ids = tag.NewFromBytesSlice(notFounds...)
|
||||
// add the filter to the list of filters we're subscribing to
|
||||
cancel = false
|
||||
subbedFilters = append(subbedFilters, f)
|
||||
}
|
||||
// also, if we received the limit number of events, subscription ded
|
||||
if pointers.Present(f.Limit) {
|
||||
if len(events) >= int(*f.Limit) {
|
||||
cancel = true
|
||||
}
|
||||
}
|
||||
}
|
||||
receiver := make(event.C, 32)
|
||||
// if the subscription should be cancelled, do so
|
||||
|
||||
@@ -111,17 +111,8 @@ func (p *P) Receive(msg typer.T) {
|
||||
if m.Cancel {
|
||||
if m.Id == "" {
|
||||
p.removeSubscriber(m.Conn)
|
||||
// log.D.F("removed listener %s", m.remote)
|
||||
} else {
|
||||
p.removeSubscriberId(m.Conn, m.Id)
|
||||
// log.D.C(
|
||||
// func() string {
|
||||
// return fmt.Sprintf(
|
||||
// "removed subscription %s for %s", m.Id,
|
||||
// m.remote,
|
||||
// )
|
||||
// },
|
||||
// )
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -133,27 +124,10 @@ func (p *P) Receive(msg typer.T) {
|
||||
S: m.Filters, remote: m.remote, AuthedPubkey: m.AuthedPubkey,
|
||||
}
|
||||
p.Map[m.Conn] = subs
|
||||
// log.D.C(
|
||||
// func() string {
|
||||
// return fmt.Sprintf(
|
||||
// "created new subscription for %s, %s",
|
||||
// m.remote,
|
||||
// m.Filters.Marshal(nil),
|
||||
// )
|
||||
// },
|
||||
// )
|
||||
} else {
|
||||
subs[m.Id] = Subscription{
|
||||
S: m.Filters, remote: m.remote, AuthedPubkey: m.AuthedPubkey,
|
||||
}
|
||||
// log.D.C(
|
||||
// func() string {
|
||||
// return fmt.Sprintf(
|
||||
// "added subscription %s for %s", m.Id,
|
||||
// m.remote,
|
||||
// )
|
||||
// },
|
||||
// )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user