Пример #1
0
func main() {
	carrierLogger = util.NewLogger(cfg.Section("LOG").Key("Path").MustString(util.HomeDir()+"/logs/carrier.log"), util.FilenameSuffixInDay)
	logger.SetLogger(carrierLogger)

	var (
		clusterServerList []string
		err               error
		addr              *ini.Key
	)
	for _, addr = range cfg.Section("CLUSTER.HOST").Keys() {
		clusterServerList = append(clusterServerList, addr.Value())
	}

	// 初始化 cluster
	if err = cluster.InitClusterParameter(
		clusterServerList,
		time.Duration(cfg.Section("CLUSTER").Key("RefreshInterval").MustInt(300))*time.Second,
		cfg.Section("CLUSTER").Key("MaxIdle").MustInt(50),
		time.Duration(cfg.Section("CLUSTER").Key("TestOnBorrowTimeout").MustInt(150))*time.Second,
		time.Duration(cfg.Section("CLUSTER").Key("ConnectTimeout").MustInt(3))*time.Second,
		time.Duration(cfg.Section("CLUSTER").Key("ReadTimeout").MustInt(3))*time.Second,
		time.Duration(cfg.Section("CLUSTER").Key("WriteTimeout").MustInt(3))*time.Second,
	); err != nil {
		panic(err)
	}

	// 服务端口 client
	ServeForClient(cfg.Section("").Key("ClientAddr").MustString(":6679"))
}
Пример #2
0
// reload считывает данные с ini-файла и загружает в структуру. При необходимости инициализирует данные значениями по умолчанию
func reloadSettings() error {
	var key *ini.Key
	var err error
	var value int

	defUpdSetDelayInt, _ := strconv.Atoi(defUpdSetDelay)
	defUpdDataDelayInt, _ := strconv.Atoi(defUpdDataDelay)

	// открыть ini-файл
	cf, err = ini.Load(nameIniFile)
	if err != nil {
		if os.IsNotExist(err) { // файл с настройками не найден?
			cf = ini.Empty() // создать новый объект с настройками
		} else {
			return err
		}
	}

	// обработать секцию "general" с основными настройками
	section, err := cf.GetSection("general")
	if err != nil {
		section, err = cf.NewSection("general") // секции нет в ini-файле? Тогда создать.
		if err != nil {
			return err // если не удалось создать, то продолжать бессмысленно
		}
		section.Comment = "Основные настройки"
	}

	// перечитывать настройки каждые .... сек
	key, err = section.GetKey("updsetdelay")
	if err != nil {
		key, err = section.NewKey("updsetdelay", defUpdSetDelay)
		if err != nil {
			return err
		}
		key.Comment = "Перечитывать настройки каждые ... сек."
	}
	value = key.RangeInt(defUpdSetDelayInt, 5, 1000000) // значение в пределах 5 - 1000000 секунд. При ошибке инициализация значением по умолчанию
	key.SetValue(strconv.Itoa(value))
	cfstruct.updsetdelay = value

	// обновлять данные плейлиста каждые .... сек
	key, err = section.GetKey("upddatadelay")
	if err != nil {
		key, err = section.NewKey("upddatadelay", defUpdDataDelay)
		if err != nil {
			return err
		}
		key.Comment = "Обновлять данные плейлиста каждые ... сек."
	}
	value = key.RangeInt(defUpdDataDelayInt, 300, 1000000) // значение в пределах 300 - 1000000 секунд. При ошибке инициализация значением по умолчанию
	key.SetValue(strconv.Itoa(value))
	cfstruct.upddatadelay = value

	// Имя файла плейлиста и путь до него.
	key, err = section.GetKey("pathplaylist")
	if err != nil {
		key, err = section.NewKey("pathplaylist", defPathPlaylist)
		if err != nil {
			return err
		}
		key.Comment = "Имя файла плейлиста и путь до него."
	}
	cfstruct.pathplaylist = key.String()

	// Количество параллельных потоков для парсинга сайта
	key, err = section.GetKey("workers")
	if err != nil {
		key, err = section.NewKey("workers", strconv.Itoa(defWorkers))
		if err != nil {
			return err
		}
		key.Comment = "Количество параллельных потоков для парсинга сайта. По умолчанию равен кол-ву ядер процессора."

	}
	value = key.RangeInt(defWorkers, 1, 100) // значение в пределах 1 - 100 отдельных потоков. При ошибке инициализация значением по умолчанию
	key.SetValue(strconv.Itoa(value))
	cfstruct.workers = value

	// секция "каналы"
	section, err = cf.GetSection("channels")
	if err != nil {
		section, err = cf.NewSection("channels") // секции нет в ini-файле? Создать секцию.
		if err != nil {
			return err
		}
	}
	section.Comment = "Список каналов. Пример строки: -:rossija"

	// секция содержит список каналов
	ch := section.Keys() // получить массив списка каналов
	cfstruct.channels = ch

	err = cf.SaveTo(nameIniFile) // сохранить файл с значениями по умолчанию
	if err != nil {
		return err
	}

	return nil
}