func main() { check(os.MkdirAll(FOLDER, 0777)) // Initialisation des variables serveur lastUpdate = time.Date(1994, time.April, 2, 2, 0, 0, 0, time.UTC) dat, err := ioutil.ReadFile(LASTUPFOLDER) if err == nil { err = json.Unmarshal(dat, &lastUpdate) check(err) } envoi = &sync.Mutex{} err = util.ScanDir(FOLDER, &mainFolder) check(err) // création du socket d'écoute fd, err := s.Socket(s.AF_INET, s.SOCK_STREAM, 0) if err != nil { check(err) } defer s.Close(fd) if err := s.Bind(fd, &s.SockaddrInet4{Port: PORT, Addr: [4]byte{0, 0, 0, 0}}); err != nil { check(err) } if err := s.Listen(fd, 5); err != nil { check(err) } // Lancement de l'écoute du serveur fmt.Println("Serveur lancé !") for { nfd, sa, err := s.Accept(fd) if err != nil { check(err) } envoi.Lock() go app(nfd, sa) envoi.Unlock() } }
func main() { fmt.Printf("Demarrage client") check(os.MkdirAll(FOLDER, 0777)) // Scan du répertoire à synchroniser var listRep util.Fol err := util.ScanDir(FOLDER, &listRep) check(err) b, err := listRep.ToBytes() check(err) // Etablissement de la connexion au serveur var conn util.Conn err = conn.Dial(PORT, ADDR) check(err) defer conn.Close() // Attente d'une réponse serveur for { ack, err := conn.Readbuffer(1) check(err) if len(ack) == 1 && ack[0] == 42 { break } } // Envoi de l'arborescence sous forme de Json fmt.Printf("\nEnvoi de l'arborescence\n\n") err = conn.Write(util.Int64toByte(len(b))) check(err) err = conn.Write(b) check(err) // Réception du calcul des différences fmt.Printf("Réception du calcul des différences...") // diff1 tmp, err := conn.DownloadFile() // téléchargement d'un fichier check(err) diff1, err := util.BytesToFol(tmp) // conversion en structure Fol check(err) toSend := diff1.Parcours() // tableau des fichiers à envoyer fmt.Println(toSend) // diff2 tmp2, err := conn.DownloadFile() check(err) diff2, err := util.BytesToFol(tmp2) check(err) toGet := diff2.Parcours() fmt.Println(toGet) // del 1 tmp3, err := conn.DownloadFile() check(err) del, err := util.BytesToFol(tmp3) check(err) toDel := del.Parcours() fmt.Println(toDel) // Suppression des fichiers locaux /*for _, file := range toDel { fmt.Println("Suppression de ", file.Nom) check(util.DeleteFile(file.Nom)) }*/ // Envoi des fichiers client vers serveur for _, file := range toSend { fmt.Println("Envoi de ", file.Nom) err = conn.UploadFile(file.Nom) check(err) } // Réception des fichiers serveur vers client for _, file := range toGet { fmt.Println("Reception de ", file.Nom) newfile, err := conn.DownloadFile() check(err) check(util.WriteFile(file.Nom, newfile)) } fmt.Println("Synchronisation effectuée avec succès.") }