cloud-control-panel/login.go

81 lines
2.5 KiB
Go

package main
import "log"
import "fmt"
import "time"
import "git.wit.com/wit/gui"
import pb "git.wit.com/wit/witProtobuf"
// import "github.com/davecgh/go-spew/spew"
// This sends a login protocol buffer and waits for a response
func login(b *gui.GuiButton) {
log.Println("login() START")
State = "SEND LOGIN"
// TODO: move this into a seperate goroutine
// note: this may never be possible because of cross platform
// andlabs/ui requirements. windows and macos seem to freak out
// when you try to trigger the UI in seperate threads
values, _ := b.Values.(*myButtonInfo)
event := pb.MakeLoginEvent()
event.Account = values.Account
websocketSendProtobuf(event)
count := 0
for {
log.Println("\tSleep() in buttonClick() State =", State)
time.Sleep(200 * time.Millisecond)
if (State == "NEW PROTOBUF") {
if (currentMessage == nil) {
gui.ErrorWindow(b.Box.Window,
"There was a socket error",
"More detailed information can be shown here.")
State = "done"
} else {
log.Println("LOGIN currentMessage =", currentMessage)
if (currentMessage.Type == pb.Event_OK) {
msg := "On account " + values.Account.Nick + "\n"
log.Println("\tLOGIN WAS OK!", msg)
log.Println("\tLOGIN WAS OK! old button.Account was =", values.Account)
log.Println("\tLOGIN WAS OK! currentMessage.Account =", currentMessage.Account)
if (values.Account.Id == currentMessage.Account.Id) {
if (values.Account.Token != currentMessage.Account.Token) {
log.Println("\tLOGIN SENT NEW TOKEN")
values.Account.Token = currentMessage.Account.Token
log.Println("\tLOGIN WAS OK! old button.Account is now =", values.Account)
}
}
log.Println("\tLOGIN WAS OK!")
gui.MessageWindow(b.Box.Window, "Login OK", msg)
} else if (currentMessage.Type == pb.Event_FAIL) {
log.Println("\tLOGIN FAILED")
log.Println("\tLOGIN FAILED")
log.Println("\tLOGIN FAILED")
msg := "On account " + values.Account.Nick + "\n"
msg += "pb.Comment = " + currentMessage.Comment + "\n"
msg += "pb.Id = " + fmt.Sprintf("%d", currentMessage.Id) + "\n"
msg += "pb.Email = " + values.Account.Email + "\n"
msg += "pb.Username = " + values.Account.Username + "\n"
gui.ErrorWindow(b.Box.Window, "Login Failed", msg)
}
currentMessage = nil
State = "done"
}
return
}
// TODO: fix this with an actual timeout
count += 1
if (count > 10) {
log.Println("\tERROR: waited too long for a resposne")
currentMessage = nil
State = "done"
return
}
}
}