wip
This commit is contained in:
		
							parent
							
								
									7413b12b4a
								
							
						
					
					
						commit
						57fd41dedc
					
				@ -72,6 +72,11 @@ func newScriptContext(obj db.Object) (*scriptContext, error) {
 | 
				
			|||||||
	return &scriptContext{}, nil
 | 
						return &scriptContext{}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (sc *scriptContext) Handle(ver, rest string, sender, target *db.Object) error {
 | 
				
			||||||
 | 
						// TODO call _handle function from the Lstate
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Gateway struct {
 | 
					type Gateway struct {
 | 
				
			||||||
	// maps game object IDs to script contexts
 | 
						// maps game object IDs to script contexts
 | 
				
			||||||
	m  map[int]*scriptContext
 | 
						m  map[int]*scriptContext
 | 
				
			||||||
@ -85,39 +90,14 @@ func NewGateway() *Gateway {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RefreshObj ensures that the script context for the given game object is running the latest code for the object's script
 | 
					func (g *Gateway) VerbHandler(verb, rest string, sender, target *db.Object) error {
 | 
				
			||||||
func (g *Gateway) RefreshObject(obj db.Object) error {
 | 
					 | 
				
			||||||
	g.mu.RLock()
 | 
					 | 
				
			||||||
	var sc *scriptContext
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if sc, ok := g.m[obj.ID]; ok {
 | 
					 | 
				
			||||||
		if !sc.NeedsRefresh(obj) {
 | 
					 | 
				
			||||||
			g.mu.RUnlock()
 | 
					 | 
				
			||||||
			return nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	g.mu.RUnlock()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	sc, err := newScriptContext(obj)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	g.mu.Lock()
 | 
					 | 
				
			||||||
	g.m[obj.ID] = sc
 | 
					 | 
				
			||||||
	g.mu.Unlock()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (g *Gateway) VerbHandler(msg string, sender, target db.Object) error {
 | 
					 | 
				
			||||||
	var sc *scriptContext
 | 
						var sc *scriptContext
 | 
				
			||||||
	g.mu.RLock()
 | 
						g.mu.RLock()
 | 
				
			||||||
	sc, ok := g.m[target.ID]
 | 
						sc, ok := g.m[target.ID]
 | 
				
			||||||
	g.mu.RUnlock()
 | 
						g.mu.RUnlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !ok || sc.NeedsRefresh(target) {
 | 
						if !ok || sc.NeedsRefresh(*target) {
 | 
				
			||||||
		sc, err := newScriptContext(target)
 | 
							sc, err := newScriptContext(*target)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -127,5 +107,7 @@ func (g *Gateway) VerbHandler(msg string, sender, target db.Object) error {
 | 
				
			|||||||
		g.mu.Unlock()
 | 
							g.mu.Unlock()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sc.Handle(verb, rest, sender, target)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user