public void TestCheckForUpdates()
        {
            int lobbyId = 0;

            using (var db = new CSSDataContext())
            {
                //Create autoupdate files
                var file = new AutoUpdateFile()
                {
                    Filename = "mdl", IsProtected = true
                };
                db.AutoUpdateFiles.InsertOnSubmit(file);

                var lobby = db.Lobbies.FirstOrDefault();
                lobbyId = lobby.Id;

                file.AutoUpdateFile_Lobbies.Add(new AutoUpdateFile_Lobby()
                {
                    CurrentVersion = "1.0",
                    DateCreated    = DateTime.Now,
                    DateModified   = DateTime.Now,
                    Lobby          = lobby,
                    ValidChecksum  = "VALID"
                });

                db.SubmitChanges();
            }

            var clientService = new ClientService();
            var files         = clientService.CheckForUpdates(lobbyId);
            var fileResult    = files.Files.FirstOrDefault();

            Assert.AreEqual(1, files.Files.Count);
            Assert.IsTrue(fileResult.IsProtected);
            Assert.AreEqual("mdl", fileResult.Filename);
            Assert.AreEqual("VALID", fileResult.ValidChecksum.Trim());
            Assert.AreEqual("1.0", fileResult.CurrentVersion);
            Assert.AreEqual(lobbyId, fileResult.LobbyId);
        }
예제 #2
0
        public static void AddAutoUpdateFiles(string baseDirectory)
        {
            using (var db = new CSSDataContext())
            {
                foreach (var path in Directory.GetDirectories(baseDirectory))
                {
                    int lobbyId;
                    if (!int.TryParse(Path.GetFileName(path), out lobbyId))
                    {
                        continue;
                    }

                    //Find lobby
                    var lobby = db.Lobbies.FirstOrDefault(p => p.Id == lobbyId);
                    var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);

                    foreach (var filePath in files)
                    {
                        string file = filePath.Substring(path.Length, filePath.Length - path.Length);
                        if (file.StartsWith(@"\"))
                        {
                            file = file.Remove(0, 1);
                        }

                        //Check if file_lobby exists
                        var fileLobby = lobby.AutoUpdateFile_Lobbies.FirstOrDefault(p => p.AutoUpdateFile.Filename == file);
                        if (fileLobby == null)
                        {
                            //Check if file exists
                            var autoUpdateFile = db.AutoUpdateFiles.FirstOrDefault(p => p.Filename == file);

                            if (autoUpdateFile == null)
                            {
                                //Create autoupdatefile
                                autoUpdateFile = new AutoUpdateFile()
                                {
                                    Filename    = file,
                                    IsProtected = true
                                };
                            }

                            fileLobby = new AutoUpdateFile_Lobby()
                            {
                                AutoUpdateFile = autoUpdateFile,
                                CurrentVersion = new Version(1, 0).ToString(),
                                ValidChecksum  = HashFile(filePath),
                                DateCreated    = DateTime.Now,
                                DateModified   = DateTime.Now,
                            };

                            lobby.AutoUpdateFile_Lobbies.Add(fileLobby);
                        }
                        else
                        {
                            var version     = new Version(fileLobby.CurrentVersion);
                            var nextVersion = new Version(version.Minor, version.Minor + 1);
                            fileLobby.CurrentVersion = nextVersion.ToString();
                            fileLobby.ValidChecksum  = HashFile(filePath);
                            fileLobby.DateModified   = DateTime.Now;
                        }
                    }

                    db.SubmitChanges();
                }
            }
        }