// // 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 ( "log" "os" "spreadspace.org/dolmetschctl/pkg/mixer" ) func addLanguage(sm *StateMachine, name Language, original, interpreter mixer.Channel) { if err := sm.AddLanguage(name, original, interpreter); err != nil { log.Printf("adding language '%s' failed: %v", name, err) os.Exit(1) } log.Printf("successfully added language: '%s'", name) } func main() { log.Println("hello world.") // ************************************* // * initialize core m, err := mixer.NewMixer(mixer.Config{DevIn: "ESI MIDIMATE eX MIDI 2", DevOut: "ESI MIDIMATE eX MIDI 1"}) if err != nil { log.Printf("Error opening the mixer: %v", err) os.Exit(1) } defer m.Shutdown() log.Printf("successfully connected to mixer:") log.Printf(" input: %s\t%s", m.DevIn.ID, m.DevIn.Name) log.Printf(" output: %s\t%s", m.DevOut.ID, m.DevOut.Name) if err = m.Init(); err != nil { log.Printf("Error initializeing the mixer: %v", err) os.Exit(1) } log.Printf("mixer successfully initialized!") var sm *StateMachine if sm, err = NewStateMachine(m); err != nil { log.Printf("initializing state machine failed: %v", err) os.Exit(1) } log.Printf("state machine successfully initialized!") // TODO: make this configurable addLanguage(sm, "en", 0x20, 0x24) addLanguage(sm, "de", 0x22, 0x25) sm.Start() defer sm.Shutdown() // ************************************* // * initialize control interfaces var telnet *TelnetInterface if telnet, err = NewTelnetInterface("127.0.0.1:1234", sm); err != nil { log.Printf("creating telnet interface failed: %v", err) os.Exit(1) } log.Printf("telnet interface successfully initialized!") var web *WebInterface if web, err = NewWebInterface("127.0.0.1:8234", "./web-static", sm); err != nil { log.Printf("creating web interface failed: %v", err) os.Exit(1) } log.Printf("web interface successfully initialized!") // ************************************* // * run control interfaces stop := make(chan bool) go func() { log.Printf("starting telnet interface") if err = telnet.Run(); err != nil { log.Printf("running telnet interface failed: %v", err) } stop <- true }() go func() { log.Printf("starting web interface") if err = web.Run(); err != nil { log.Printf("running web interface failed: %v", err) } stop <- true }() <-stop log.Printf("at least one control interface has stopped - bringing down the whole process") }