package client import ( "bufio" "fmt" "os" "strings" ) func readStdin(message string) string { fmt.Println(message) scanner := bufio.NewScanner(os.Stdin) scanner.Scan() return scanner.Text() } func commandError() { fmt.Println("MSG SERVICE: command error!") showHelp() } func showHelp() { fmt.Println("Comandos da aplicação cliente:") fmt.Println("-user : Especifica o ficheiro com dados do utilizador. Por omissão, será assumido que esse ficheiro é userdata.p12.") fmt.Println("send : Envia uma mensagem com assunto destinada ao utilizador com identificador . O conteúdo da mensagem será lido do stdin, e o tamanho deve ser limitado a 1000 bytes.") fmt.Println("askqueue: Solicita ao servidor que lhe envie a lista de mensagens não lidas da queue do utilizador.") fmt.Println("getmsg : Solicita ao servidor o envio da mensagem da sua queue com número .") fmt.Println("help: Imprime instruções de uso do programa.") } func showMessagesInfo(page int, numPages int, messages []ClientMessageInfo) int { if messages == nil { fmt.Println("No unread messages in the queue") return 0 } for _, message := range messages { if message.Subject == "" { fmt.Printf("ERROR DECRYPTING MESSAGE %v IN QUEUE FROM UID %v\n", message.Num, message.FromUID) continue } fmt.Printf("%v:%v:%v:%v\n", message.Num, message.FromUID, message.Timestamp, message.Subject) } fmt.Printf("Page %v/%v\n", page, numPages) return messagesInfoPageNavigation(page, numPages) } func messagesInfoPageNavigation(page int, numPages int) int { var action string switch page { case 1: if page == numPages { action = readStdin("Actions: quit") } else { action = readStdin("Actions: quit/next") } case numPages: action = readStdin("Actions: prev/quit") default: action = readStdin("prev/quit/next") } switch strings.ToLower(action) { case "prev": if page == 1 { fmt.Println("Unavailable action: Already in first page") messagesInfoPageNavigation(page, numPages) } else { return -1 } case "quit": return 0 case "next": if page == numPages { fmt.Println("Unavailable action: Already in last page") messagesInfoPageNavigation(page, numPages) } else { return 1 } default: fmt.Println("Unknown action") messagesInfoPageNavigation(page, numPages) } return 0 } func showMessage(message ClientMessage) { fmt.Printf("From: %s\n", message.FromUID) fmt.Printf("To: %s\n", message.ToUID) fmt.Printf("Subject: %s\n", message.Subject) fmt.Printf("Body: %s\n", message.Body) }