trunk
vilmibm 2022-12-22 22:55:35 -08:00
parent ec67b3169d
commit 9824fecaa2
2 changed files with 34 additions and 4 deletions

View File

@ -106,6 +106,26 @@ func (s *gameWorldServer) HandleCmd(verb, rest string, sender *db.Object) {
// TODO
}
/*
what's the flow for when i'm at a computer and type /say hi ?
- server gets "SAY hi" from vilmibm
- server gets all objects in earshot (including vilmibm's avatar)
- for each object:
- call whatever handler it has for "hears"
and then that's it, right? over in witch land:
- hears handler for an avatar has:
tellMe(sender.get("name") + " says " + msg)
- tellMe somehow calls a method on the gameWorldServer that can look up a
session ID and thus use the msgRouter to send a message. I'm going to sleep
on this so I can think about the right way to structure those dependencies.
*/
func (s *gameWorldServer) Commands(stream proto.GameWorld_CommandsServer) error {
var sid string
for {
@ -138,6 +158,12 @@ func (s *gameWorldServer) Commands(stream proto.GameWorld_CommandsServer) error
}
log.Printf("found avatar %#v", avatar)
affected, err := s.db.Earshot(*avatar)
for _, o := range affected {
err = s.Gateway.VerbHandler(cmd.Verb, cmd.Rest, *avatar, o)
}
s.HandleCmd(cmd.Verb, cmd.Rest, avatar)
/*

View File

@ -37,6 +37,10 @@ has({
hears(".*eat.*", function(msg)
does("quivers nervously")
end)
hears(".*", function(msg)
tellMe(sender().name + " says " + msg)
end)
`
/*
@ -94,14 +98,14 @@ func NewGateway(cb func(string, string, *db.Object)) *Gateway {
}
}
func (g *Gateway) VerbHandler(verb, rest string, sender, target *db.Object) error {
func (g *Gateway) VerbHandler(verb, rest string, sender, target db.Object) error {
var sc *scriptContext
g.mu.RLock()
sc, ok := g.m[target.ID]
g.mu.RUnlock()
if !ok || sc.NeedsRefresh(*target) {
sc, err := newScriptContext(*target)
if !ok || sc.NeedsRefresh(target) {
sc, err := newScriptContext(target)
if err != nil {
return err
}
@ -111,7 +115,7 @@ func (g *Gateway) VerbHandler(verb, rest string, sender, target *db.Object) erro
g.mu.Unlock()
}
sc.Handle(verb, rest, sender, target)
sc.Handle(verb, rest, &sender, &target)
return nil
}