Implement server to client ChannelDone
This commit is contained in:
		@@ -2,6 +2,7 @@ package server
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"sync"
 | 
			
		||||
@@ -243,7 +244,9 @@ func (s *Server) handleConn(c codec.Codec) {
 | 
			
		||||
		var call types.Request
 | 
			
		||||
		// Read request using codec
 | 
			
		||||
		err := c.Decode(&call)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
		if err == io.EOF {
 | 
			
		||||
			break
 | 
			
		||||
		} else if err != nil {
 | 
			
		||||
			s.sendErr(c, call, nil, err)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
@@ -285,6 +288,18 @@ func (s *Server) handleConn(c codec.Codec) {
 | 
			
		||||
							Return: val,
 | 
			
		||||
						})
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					// Cancel context
 | 
			
		||||
					ctx.Cancel()
 | 
			
		||||
					// Delete context from map
 | 
			
		||||
					s.contextsMtx.Lock()
 | 
			
		||||
					delete(s.contexts, ctx.channelID)
 | 
			
		||||
					s.contextsMtx.Unlock()
 | 
			
		||||
 | 
			
		||||
					c.Encode(types.Response{
 | 
			
		||||
						ID:          ctx.channelID,
 | 
			
		||||
						ChannelDone: true,
 | 
			
		||||
					})
 | 
			
		||||
				}()
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@@ -321,5 +336,7 @@ func (l lrpc) ChannelDone(_ *Context, id string) {
 | 
			
		||||
	// Cancel context
 | 
			
		||||
	ctx.Cancel()
 | 
			
		||||
	// Delete context from map
 | 
			
		||||
	l.srv.contextsMtx.Lock()
 | 
			
		||||
	delete(l.srv.contexts, id)
 | 
			
		||||
	l.srv.contextsMtx.Unlock()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user