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  }