// // dolmetschctl // // // Copyright (C) 2019 Christian Pointner // // This file is part of dolmetschctl. // // dolmetschctl is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // dolmetschctl is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with dolmetschctl. If not, see . // package main import ( "strconv" "github.com/spreadspace/telgo" "spreadspace.org/dolmetschctl/pkg/types" ) type TelnetInterface struct { server *telgo.Server } func telnetCmdLang(c *telgo.Client, args []string, sm *StateMachine) bool { if len(args) > 2 { c.Sayln("usage: lang ") return false } if len(args) == 1 { c.Sayln("current language: %s, available languages %v", sm.GetLanguage(), sm.GetLanguages()) return false } if err := sm.SetLanguage(types.Language(args[1])); err != nil { c.Sayln("selecting language failed: %v", err) } return false } func telnetCmdRatio(c *telgo.Client, args []string, sm *StateMachine) bool { if len(args) > 2 { c.Sayln("usage: ratio ") return false } if len(args) == 1 { c.Sayln("current ratio: %1.3f", sm.GetOriginal2InterpreterRatio()) return false } r, err := strconv.ParseFloat(args[1], 32) if err != nil { c.Sayln("invalid ratio: %v", err) return false } if err := sm.SetOriginal2InterpreterRatio(float32(r)); err != nil { c.Sayln("setting ratio failed: %v", err) } return false } func telnetCmdState(c *telgo.Client, args []string, sm *StateMachine) bool { if len(args) != 1 { c.Sayln("usage: state") return false } state, ratio, lang := sm.GetState() c.Sayln("current state: %s", state) c.Sayln("current ratio: %s", ratio) c.Sayln("current language: %s", lang) return false } func telnetQuit(c *telgo.Client, args []string) bool { return true } func (telnet *TelnetInterface) Run() error { return telnet.server.Run() } func NewTelnetInterface(addr string, sm *StateMachine) (telnet *TelnetInterface, err error) { telnet = &TelnetInterface{} cmdlist := make(telgo.CmdList) cmdlist["lang"] = func(c *telgo.Client, args []string) bool { return telnetCmdLang(c, args, sm) } cmdlist["ratio"] = func(c *telgo.Client, args []string) bool { return telnetCmdRatio(c, args, sm) } cmdlist["state"] = func(c *telgo.Client, args []string) bool { return telnetCmdState(c, args, sm) } cmdlist["quit"] = telnetQuit telnet.server, err = telgo.NewServer(addr, "dolmetschctl> ", cmdlist, nil) return }