func NewVNCSession()

in gymvnc/gymvnc.go [82:138]


func NewVNCSession(name string, c VNCSessionConfig) *VNCSession {
	if c.QualityLevel == -1 {
	} else if c.QualityLevel < 0 {
		log.Warningf("[%s] Quality level %d requested, but valid values are betweeen 0 (worst) and 9 (best). Using 0 intead.", c.Address, c.QualityLevel)
		c.QualityLevel = 0
	} else if c.QualityLevel > 9 {
		log.Warningf("[%s] Quality level %d requested, but valid values are betweeen 0 (worst) and 9 (best). Using 9 instead.", c.Address, c.QualityLevel)
		c.QualityLevel = 9
	}

	if c.CompressLevel == -1 {
	} else if c.CompressLevel < 0 {
		log.Warningf("[%s] Compress level %d requested, but valid values are betweeen 0 (least compression) and 9 (most compression). Using 0 intead.", c.Address, c.CompressLevel)
		c.CompressLevel = 0
	} else if c.CompressLevel > 9 {
		log.Warningf("[%s] Compress level %d requested, but valid values are betweeen 0 (least compression) and 9 (most compression). Using 9 instead.", c.Address, c.CompressLevel)
		c.CompressLevel = 9
	}

	if c.FineQualityLevel == -1 {
	} else if c.FineQualityLevel < 0 {
		log.Warningf("[%s] Fine quality level %d requested, but valid values are betweeen 1 (lowest quality) and 100 (highest quality). Using 0 instead.", c.Address, c.FineQualityLevel)
		c.FineQualityLevel = 0
	} else if c.FineQualityLevel > 100 {
		log.Warningf("[%s] Fine quality level %d requested, but valid values are betweeen 0 (lowest quality) and 100 (highest quality). Using 100 instead.", c.Address, c.FineQualityLevel)
		c.FineQualityLevel = 100
	}

	if c.SubsampleLevel == -1 {
	} else if c.SubsampleLevel < 0 {
		log.Warningf("[%s] Subsample level %d requested, but valid values are betweeen 0 (full color) and 3 (grayscale). Using 0 instead.", c.Address, c.SubsampleLevel)
		c.SubsampleLevel = 0
	} else if c.SubsampleLevel > 3 {
		log.Warningf("[%s] Subsample level %d requested, but valid values are betweeen 0 (full color) and 3 (grayscale). Using 3 instead.", c.Address, c.SubsampleLevel)
		c.SubsampleLevel = 3
	}

	if c.Encoding == "" {
		c.Encoding = "tight"
	}

	lock := &sync.Mutex{}
	session := &VNCSession{
		name:               name,
		mgr:                NewSessionMgr(),
		backUpdated:        true,
		deferredUpdatesMax: 60,
		updated:            sync.NewCond(lock),
		config:             c,

		id:    id,
		label: fmt.Sprintf("%s:%s", name, c.Address),
	}
	id++
	session.start()
	return session
}