github.com/dnutiu/simplFT@v0.0.0-20181023061248-df4b14cdce57/server/parser.go (about) 1 package server 2 3 import ( 4 "strings" 5 ) 6 7 // checkArgumentsLength returns an error if length is not equal to expected. 8 func checkArgumentsLength(length int, expected int) error { 9 if length > expected { 10 return InputTooManyArguments 11 } else if length < expected { 12 return InputTooFewArguments 13 } 14 return nil 15 } 16 17 func ProcessInput(c Client, text string) error { 18 commands := strings.Fields(text) 19 commandsLen := len(commands) 20 21 if commandsLen == 0 { 22 return nil 23 } 24 25 thisCommand := commands[0] 26 27 switch thisCommand { 28 case "cd": 29 err := checkArgumentsLength(commandsLen, 2) 30 if err != nil { 31 return &InputError{thisCommand, err} 32 } 33 34 err = ChangeDirectoryCommand(c, commands[1]) 35 if err != nil { 36 return err 37 } 38 case "get": 39 err := checkArgumentsLength(commandsLen, 2) 40 if err != nil { 41 return &InputError{thisCommand, err} 42 } 43 44 // Get the file 45 _, err = GetFile(c, commands[1]) 46 if err != nil { 47 return &InputError{thisCommand, err} 48 } 49 case "pic": 50 err := checkArgumentsLength(commandsLen, 2) 51 if err != nil { 52 return &InputError{thisCommand, err} 53 } 54 55 // Get the file 56 err = SendASCIIPic(c, commands[1]) 57 if err != nil { 58 return &InputError{thisCommand, err} 59 } 60 case "ls": 61 err := checkArgumentsLength(commandsLen, 1) 62 if err != nil { 63 return &InputError{thisCommand, err} 64 } 65 66 err = ListFiles(c) 67 if err != nil { 68 return &InputError{thisCommand, err} 69 } 70 case "clear": 71 err := checkArgumentsLength(commandsLen, 1) 72 if err != nil { 73 return &InputError{thisCommand, err} 74 } 75 76 err = ClearScreen(c) 77 if err != nil { 78 return err 79 } 80 case "help": 81 // Check arguments 82 err := checkArgumentsLength(commandsLen, 1) 83 if err != nil { 84 return &InputError{thisCommand, err} 85 } 86 87 err = ShowHelp(c) 88 if err != nil { 89 return &InputError{thisCommand, err} 90 } 91 case "exit": 92 err := checkArgumentsLength(commandsLen, 1) 93 if err != nil { 94 return &InputError{thisCommand, err} 95 } 96 97 c.Disconnect() 98 default: 99 return &InputError{thisCommand, InputInvalidCommand} 100 } 101 102 return nil 103 }