mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	a little cleanup to Conn functions
This commit is contained in:
		
							parent
							
								
									5dfc71e1ee
								
							
						
					
					
						commit
						72ed541bf3
					
				
					 1 changed files with 19 additions and 17 deletions
				
			
		| 
						 | 
					@ -82,7 +82,7 @@ func (c *Conn) String() string {
 | 
				
			||||||
	return fmt.Sprintf("conn=%p", c)
 | 
						return fmt.Sprintf("conn=%p", c)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This should never be called from the router goroutine
 | 
					// This should never be called from the router goroutine, used in the dial functions
 | 
				
			||||||
func (c *Conn) search() error {
 | 
					func (c *Conn) search() error {
 | 
				
			||||||
	var sinfo *searchInfo
 | 
						var sinfo *searchInfo
 | 
				
			||||||
	var isIn bool
 | 
						var isIn bool
 | 
				
			||||||
| 
						 | 
					@ -122,6 +122,23 @@ func (c *Conn) search() error {
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Used in session keep-alive traffic in Conn.Write
 | 
				
			||||||
 | 
					func (c *Conn) doSearch() {
 | 
				
			||||||
 | 
						routerWork := func() {
 | 
				
			||||||
 | 
							// Check to see if there is a search already matching the destination
 | 
				
			||||||
 | 
							sinfo, isIn := c.core.searches.searches[*c.nodeID]
 | 
				
			||||||
 | 
							if !isIn {
 | 
				
			||||||
 | 
								// Nothing was found, so create a new search
 | 
				
			||||||
 | 
								searchCompleted := func(sinfo *sessionInfo, e error) {}
 | 
				
			||||||
 | 
								sinfo = c.core.searches.newIterSearch(c.nodeID, c.nodeMask, searchCompleted)
 | 
				
			||||||
 | 
								c.core.log.Debugf("%s DHT search started: %p", c.String(), sinfo)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// Continue the search
 | 
				
			||||||
 | 
							sinfo.continueSearch()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						go func() { c.core.router.admin <- routerWork }()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Conn) getDeadlineCancellation(value *atomic.Value) util.Cancellation {
 | 
					func (c *Conn) getDeadlineCancellation(value *atomic.Value) util.Cancellation {
 | 
				
			||||||
	if deadline, ok := value.Load().(time.Time); ok {
 | 
						if deadline, ok := value.Load().(time.Time); ok {
 | 
				
			||||||
		// A deadline is set, so return a Cancellation that uses it
 | 
							// A deadline is set, so return a Cancellation that uses it
 | 
				
			||||||
| 
						 | 
					@ -173,26 +190,11 @@ func (c *Conn) Write(b []byte) (bytesWritten int, err error) {
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// The rest of this work is session keep-alive traffic
 | 
							// The rest of this work is session keep-alive traffic
 | 
				
			||||||
		doSearch := func() {
 | 
					 | 
				
			||||||
			routerWork := func() {
 | 
					 | 
				
			||||||
				// Check to see if there is a search already matching the destination
 | 
					 | 
				
			||||||
				sinfo, isIn := c.core.searches.searches[*c.nodeID]
 | 
					 | 
				
			||||||
				if !isIn {
 | 
					 | 
				
			||||||
					// Nothing was found, so create a new search
 | 
					 | 
				
			||||||
					searchCompleted := func(sinfo *sessionInfo, e error) {}
 | 
					 | 
				
			||||||
					sinfo = c.core.searches.newIterSearch(c.nodeID, c.nodeMask, searchCompleted)
 | 
					 | 
				
			||||||
					c.core.log.Debugf("%s DHT search started: %p", c.String(), sinfo)
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				// Continue the search
 | 
					 | 
				
			||||||
				sinfo.continueSearch()
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			go func() { c.core.router.admin <- routerWork }()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		switch {
 | 
							switch {
 | 
				
			||||||
		case time.Since(sinfo.time) > 6*time.Second:
 | 
							case time.Since(sinfo.time) > 6*time.Second:
 | 
				
			||||||
			if sinfo.time.Before(sinfo.pingTime) && time.Since(sinfo.pingTime) > 6*time.Second {
 | 
								if sinfo.time.Before(sinfo.pingTime) && time.Since(sinfo.pingTime) > 6*time.Second {
 | 
				
			||||||
				// TODO double check that the above condition is correct
 | 
									// TODO double check that the above condition is correct
 | 
				
			||||||
				doSearch()
 | 
									c.doSearch()
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				sinfo.core.sessions.ping(sinfo)
 | 
									sinfo.core.sessions.ping(sinfo)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue