mirror of https://github.com/v2ray/v2ray-core
				
				
				
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			958 B
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			958 B
		
	
	
	
		
			Go
		
	
	
| package mocks
 | |
| 
 | |
| import (
 | |
| 	"io"
 | |
| 	"sync"
 | |
| 
 | |
| 	"github.com/v2ray/v2ray-core/app"
 | |
| 	v2net "github.com/v2ray/v2ray-core/common/net"
 | |
| )
 | |
| 
 | |
| type InboundConnectionHandler struct {
 | |
| 	Port       v2net.Port
 | |
| 	Space      app.Space
 | |
| 	ConnInput  io.Reader
 | |
| 	ConnOutput io.Writer
 | |
| }
 | |
| 
 | |
| func (this *InboundConnectionHandler) Listen(port v2net.Port) error {
 | |
| 	this.Port = port
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (this *InboundConnectionHandler) Close() {
 | |
| 
 | |
| }
 | |
| 
 | |
| func (this *InboundConnectionHandler) Communicate(packet v2net.Packet) error {
 | |
| 	ray := this.Space.PacketDispatcher().DispatchToOutbound(packet)
 | |
| 
 | |
| 	input := ray.InboundInput()
 | |
| 	output := ray.InboundOutput()
 | |
| 
 | |
| 	readFinish := &sync.Mutex{}
 | |
| 	writeFinish := &sync.Mutex{}
 | |
| 
 | |
| 	readFinish.Lock()
 | |
| 	writeFinish.Lock()
 | |
| 
 | |
| 	go func() {
 | |
| 		v2net.ReaderToChan(input, this.ConnInput)
 | |
| 		close(input)
 | |
| 		readFinish.Unlock()
 | |
| 	}()
 | |
| 
 | |
| 	go func() {
 | |
| 		v2net.ChanToWriter(this.ConnOutput, output)
 | |
| 		writeFinish.Unlock()
 | |
| 	}()
 | |
| 
 | |
| 	readFinish.Lock()
 | |
| 	writeFinish.Lock()
 | |
| 	return nil
 | |
| }
 |