8 changed files with 73 additions and 83 deletions
@ -1 +1,37 @@ |
|||||||
package app |
package app |
||||||
|
|
||||||
|
import ( |
||||||
|
"errors" |
||||||
|
|
||||||
|
"encoders.orly/envelopes/closeenvelope" |
||||||
|
"lol.mleku.dev/chk" |
||||||
|
"lol.mleku.dev/log" |
||||||
|
) |
||||||
|
|
||||||
|
// HandleClose processes a CLOSE envelope by unmarshalling the request,
|
||||||
|
// validates the presence of an <id> field, and signals cancellation for
|
||||||
|
// the associated listener through the server's publisher mechanism.
|
||||||
|
func (l *Listener) HandleClose( |
||||||
|
req []byte, |
||||||
|
) (err error) { |
||||||
|
var rem []byte |
||||||
|
env := closeenvelope.New() |
||||||
|
if rem, err = env.Unmarshal(req); chk.E(err) { |
||||||
|
return |
||||||
|
} |
||||||
|
if len(rem) > 0 { |
||||||
|
log.I.F("extra '%s'", rem) |
||||||
|
} |
||||||
|
if len(env.ID) == 0 { |
||||||
|
return errors.New("CLOSE has no <id>") |
||||||
|
} |
||||||
|
l.publishers.Receive( |
||||||
|
&W{ |
||||||
|
Cancel: true, |
||||||
|
remote: l.remote, |
||||||
|
Conn: l.conn, |
||||||
|
Id: string(env.ID), |
||||||
|
}, |
||||||
|
) |
||||||
|
return |
||||||
|
} |
||||||
|
|||||||
@ -1,65 +0,0 @@ |
|||||||
package main |
|
||||||
|
|
||||||
import ( |
|
||||||
"time" |
|
||||||
|
|
||||||
"encoders.orly/event" |
|
||||||
"encoders.orly/hex" |
|
||||||
"encoders.orly/json" |
|
||||||
"encoders.orly/tag" |
|
||||||
"github.com/pkg/profile" |
|
||||||
lol "lol.mleku.dev" |
|
||||||
"lol.mleku.dev/chk" |
|
||||||
"lukechampine.com/frand" |
|
||||||
"utils.orly" |
|
||||||
"utils.orly/bufpool" |
|
||||||
) |
|
||||||
|
|
||||||
func main() { |
|
||||||
lol.SetLogLevel("info") |
|
||||||
prof := profile.Start(profile.CPUProfile) |
|
||||||
defer prof.Stop() |
|
||||||
for range 1000000 { |
|
||||||
ev := event.New() |
|
||||||
ev.ID = frand.Bytes(32) |
|
||||||
ev.Pubkey = frand.Bytes(32) |
|
||||||
ev.CreatedAt = time.Now().Unix() |
|
||||||
ev.Kind = 1 |
|
||||||
ev.Tags = &tag.S{ |
|
||||||
{T: [][]byte{[]byte("t"), []byte("hashtag")}}, |
|
||||||
{ |
|
||||||
T: [][]byte{ |
|
||||||
[]byte("e"), |
|
||||||
hex.EncAppend(nil, frand.Bytes(32)), |
|
||||||
}, |
|
||||||
}, |
|
||||||
} |
|
||||||
ev.Content = frand.Bytes(frand.Intn(1024) + 1) |
|
||||||
ev.Sig = frand.Bytes(64) |
|
||||||
// log.I.S(ev)
|
|
||||||
b, err := json.Marshal(ev) |
|
||||||
if chk.E(err) { |
|
||||||
return |
|
||||||
} |
|
||||||
var bc []byte |
|
||||||
bc = append(bc, b...) |
|
||||||
// log.I.F("%s", bc)
|
|
||||||
ev2 := event.New() |
|
||||||
if err = json.Unmarshal(b, ev2); chk.E(err) { |
|
||||||
return |
|
||||||
} |
|
||||||
var b2 []byte |
|
||||||
if b2, err = json.Marshal(ev); err != nil { |
|
||||||
return |
|
||||||
} |
|
||||||
if !utils.FastEqual(bc, b2) { |
|
||||||
return |
|
||||||
} |
|
||||||
// free up the resources for the next iteration
|
|
||||||
ev.Free() |
|
||||||
ev2.Free() |
|
||||||
bufpool.PutBytes(b) |
|
||||||
bufpool.PutBytes(b2) |
|
||||||
bufpool.PutBytes(bc) |
|
||||||
} |
|
||||||
} |
|
||||||
Loading…
Reference in new issue