package readers import ( "StoreBackEnd/pkg/protocol" "StoreBackEnd/pkg/utils" "bufio" "strconv" ) // SendFileRulePrefix Rule command prefix const SendFileRulePrefix = "ffe_sendfile" // SendFileRule Storage structure for the SendFileRule type SendFileRule struct { // cmd Rule name cmd string // matcher Allow to make a regex match matcher *protocol.RegexMatcher } // CreateSendFileRule Creating an instance of SendFileRule func CreateSendFileRule(pattern string) protocol.IProtocolReader { return &SendFileRule{ cmd: SendFileRulePrefix, matcher: protocol.CreateRegexMatcher(pattern), } } // GetCmd retrieve the command name. func (rule SendFileRule) GetCmd() string { return rule.cmd } // Execute the Rule with a string command. func (rule SendFileRule) Execute(data string) (string, bool, func(reader *bufio.Reader) (string, bool)) { if rule.Match(data) { // TODO : cloture this command. values := rule.matcher.Parse(data) // Values fileName := values[1] fileSize, _ := strconv.Atoi(values[2]) // fileContentHash := values[3] // print received data println(values[1], " File Name Hash") println(values[2], " File Size") println(values[3], " File Content Hash") // function callback callback := func(reader *bufio.Reader) (string, bool) { hasReceive := utils.ReceiveFile(fileName, fileSize, reader) println("HEY1") /* file, _ := os.Create(fmt.Sprintf("/home/benjamin/sbe/%s", fileName)) _, err := io.Copy(file, reader) println("HEY1") if err != nil { println("Can't copy file") return "SEND_ERROR\r", false } */ if !hasReceive { return "SEND_ERROR\r", false } println("HEY2") return "SEND_OK\r", true } return "SEND_OK\r", true, callback } else { println("AHAHAHAHAHAHA") return "SEND_ERROR\r", false, nil } } // Match make a match with the current Rule and check if it matches. func (rule SendFileRule) Match(data string) bool { return rule.matcher.Match(data) }