github.com/Cloud-Foundations/Dominator@v0.3.4/lib/net/cpuSharingDialer.go (about)

     1  package net
     2  
     3  import (
     4  	"net"
     5  )
     6  
     7  type cpuSharingConnection struct {
     8  	net.Conn
     9  	cpuSharer CpuSharer
    10  }
    11  
    12  type cpuSharingDialer struct {
    13  	dialer    Dialer
    14  	cpuSharer CpuSharer
    15  }
    16  
    17  func newCpuSharingDialer(dialer Dialer, cpuSharer CpuSharer) Dialer {
    18  	return &cpuSharingDialer{dialer: dialer, cpuSharer: cpuSharer}
    19  }
    20  
    21  func (d *cpuSharingDialer) Dial(network, address string) (net.Conn, error) {
    22  	d.cpuSharer.ReleaseCpu()
    23  	defer d.cpuSharer.GrabCpu()
    24  	netConn, err := d.dialer.Dial(network, address)
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  	return &cpuSharingConnection{Conn: netConn, cpuSharer: d.cpuSharer}, nil
    29  }
    30  
    31  func (conn *cpuSharingConnection) Read(b []byte) (n int, err error) {
    32  	conn.cpuSharer.ReleaseCpu()
    33  	defer conn.cpuSharer.GrabCpu()
    34  	return conn.Conn.Read(b)
    35  }
    36  
    37  func (conn *cpuSharingConnection) Write(b []byte) (n int, err error) {
    38  	conn.cpuSharer.ReleaseCpu()
    39  	defer conn.cpuSharer.GrabCpu()
    40  	return conn.Conn.Write(b)
    41  }