static void Main(string[] args) { #region Initialise Data using (DataRepository Repo = new DataRepository()) { Repo.Departments.Add(new Department() { Name = "Maths" }); Repo.Departments.Add(new Department() { Name = "Science" }); Repo.Departments.Add(new Department() { Name = "Computing/IT" }); Repo.Departments.Add(new Department() { Name = "History" }); Repo.SaveChanges(); List <string> ComputerNames = GenerateComputerNames(); Repo.Rooms.Add(new Room() { RoomName = "D6", SpecialSeats = 5, StandardSeats = 10, SpecialSeatType = "Computer", Department = Repo.Departments.Single(d => d.Name == "Computing/IT"), ComputerNames = ComputerNames }); Repo.Rooms.Add(new Room() { RoomName = "D12", SpecialSeats = 20, StandardSeats = 5, SpecialSeatType = "Workbench", Department = Repo.Departments.Single(d => d.Name == "Computing/IT"), ComputerNames = ComputerNames }); Repo.Rooms.Add(new Room() { RoomName = "Library", SpecialSeats = 20, StandardSeats = 30, SpecialSeatType = "Computer", Department = Repo.Departments.Single(d => d.Name == "Science") }); Repo.Rooms.Add(new Room() { RoomName = "Sports Hall", SpecialSeats = 0, StandardSeats = 100, SpecialSeatType = "", Department = Repo.Departments.Single(d => d.Name == "Maths") }); //Repo.Periods.Add(new TimeSlot() { Name = "Period 1", Start = new TimeSpan(8, 50, 0), End = new TimeSpan(9, 50, 0) }); Repo.Periods.Add(new TimeSlot() { Name = "Period 1", Start = new TimeSpan(8, 50, 0), End = new TimeSpan(9, 50, 0) }); Repo.Periods.Add(new TimeSlot() { Name = "Period 2", Start = new TimeSpan(9, 50, 0), End = new TimeSpan(10, 50, 0) }); Repo.Periods.Add(new TimeSlot() { Name = "Period 3", Start = new TimeSpan(11, 10, 0), End = new TimeSpan(12, 10, 0) }); Repo.Periods.Add(new TimeSlot() { Name = "Period 4", Start = new TimeSpan(12, 10, 0), End = new TimeSpan(13, 10, 0) }); Repo.Periods.Add(new TimeSlot() { Name = "Period 5", Start = new TimeSpan(14, 0, 0), End = new TimeSpan(15, 0, 0) }); string LogonName = DataRepository.Home ? "Keith" : "09135"; // For testing on home versus school computers Repo.Students.Add(new Student() { FirstName = "Keith", LastName = "Collister", Form = "WT", Year = 13, LogonName = LogonName, Access = AccessMode.Admin }); Repo.Students.Add(new Student() { FirstName = "Dan", LastName = "Wrenn", Form = "MB", Year = 13, LogonName = "09154", Access = AccessMode.Teacher }); Repo.Students.Add(new Student() { FirstName = "Euan", LastName = "Rossie", Form = "WT", Year = 13, LogonName = "09185" }); Repo.Students.Add(new Student() { FirstName = "Max", LastName = "Norman", Form = "WT", Year = 13, LogonName = "Max" }); Repo.Students.Add(new Student() { FirstName = "Peter", LastName = "Champion", Form = "WT", Year = 13, LogonName = "Peter" }); Repo.Students.Add(new Student() { FirstName = "Mia", LogonName = "Mia", LastName = "West", Form = "MB", Year = 13 }); Repo.Students.Add(new Student() { FirstName = "Matthew", LogonName = "Matthew", LastName = "Pilkington", Form = "WT", Year = 13 }); Repo.Students.Add(new Student() { FirstName = "Kaleb", LogonName = "Kaleb", LastName = "Poole", Form = "BR", Year = 11 }); Repo.Students.Add(new Student() { FirstName = "Sam", LogonName = "Sam", LastName = "Kitto", Form = "BR", Year = 11 }); Repo.Students.Add(new Student() { FirstName = "Isobel", LogonName = "Isobel", LastName = "Stephens", Form = "MI", Year = 11 }); Repo.Subjects.Add(new Subject() { SubjectName = "Maths", Colour = Colors.Red }); Repo.Subjects.Add(new Subject() { SubjectName = "Physics", Colour = Colors.Orange }); Repo.Subjects.Add(new Subject() { SubjectName = "Computing", Colour = Colors.Blue }); Repo.Subjects.Add(new Subject() { SubjectName = "History", Colour = Colors.Green }); Repo.SaveChanges(); Repo.Teachers.Add(new Teacher() { Title = "Mrs", LogonName = "mb", FirstName = "Mary", LastName = "Bogdiukiewicz", Department = Repo.Departments.ToList().Where(d => d.Name.Contains("Computing")).Single(), Email = "*****@*****.**" }); Repo.Teachers.Add(new Teacher() { Title = "Mr", LogonName = "cn", FirstName = "Patrick", LastName = "Count", Department = Repo.Departments.ToList().Where(d => d.Name.Contains("Computing")).Single(), Email = "*****@*****.**" }); Repo.Teachers.Add(new Teacher() { Title = "Mr", LogonName = "jk", FirstName = "James", LastName = "Kenny", Department = Repo.Departments.Where(d => d.Name == "Science").Single(), Email = "*****@*****.**" }); Repo.Teachers.Add(new Teacher() { Title = "Mrs", LogonName = "rb", FirstName = "Rosemary", LastName = "Britton", Department = Repo.Departments.Where(d => d.Name == "Maths").Single(), Email = "*****@*****.**" }); Repo.Teachers.Add(new Teacher() { Title = "Mrs", LogonName = "ed", FirstName = "Emma", LastName = "Denny", Department = Repo.Departments.ToList().Where(d => d.Name.Contains("History")).Single(), Email = "*****@*****.**" }); Repo.SaveChanges(); Repo.Classes.Add(new Class() { ClassName = "Computing Yr13", Students = Repo.Students.Where(s => s.FirstName == "Keith" || s.FirstName == "Max" || s.FirstName == "Dan" || s.FirstName == "Peter").ToList(), Owner = Repo.Teachers.Where(t => t.LogonName == "mb").Single() }); Repo.Classes.Add(new Class() { ClassName = "Maths Yr13", Students = Repo.Students.Where(s => s.Form == "WT").ToList(), Owner = Repo.Teachers.Where(t => t.LogonName == "rb").Single() }); Repo.Classes.Add(new Class() { ClassName = "History Yr11", Students = Repo.Students.Where(s => s.Year == 11).ToList(), Owner = Repo.Teachers.Where(t => t.LogonName == "rb").Single() }); Repo.SaveChanges(); Repo.Bookings.Add(new Booking() { Rooms = Repo.Rooms.ToList().Where(r => r.RoomName[0] == 'D').ToList(), Students = Repo.Students.ToList().Where(s => s.FullForm == "13WT").ToList(), BookingType = BookingType.Single, Date = DateTime.Now.Date, Subject = Repo.Subjects.Where(s => s.SubjectName == "Maths").Single(), Teacher = Repo.Teachers.Where(t => t.LastName == "Britton").Single(), TimeSlot = Repo.Periods.Where(p => p.Name == "Period 1").Single(), }); Repo.Bookings.Add(new Booking() { Rooms = Repo.Rooms.Where(r => r.RoomName == "Library").ToList(), Students = Repo.Students.ToList().Where(s => s.FullForm == "13MB").ToList(), BookingType = BookingType.Weekly, Date = DateTime.Now.Date, Subject = Repo.Subjects.Where(s => s.SubjectName == "Computing").Single(), Teacher = Repo.Teachers.Where(t => t.LastName == "Bogdiukiewicz").Single(), TimeSlot = Repo.Periods.Where(p => p.Name == "Period 2").Single(), }); Repo.SaveChanges(); } #endregion Print("Initialised data", ConsoleColor.Gray); // Load the settings from the Settings.txt file Settings.Load(); Print("Loaded settings", ConsoleColor.Gray); // Flag to represent whether the server is in the middle of shutting down bool Closing = false; // Initialise the Listener with the port defined in the settings file Listener = new Listener(Settings.Port); try { // Hook up the event handlers - these define the actual action taken by the server Listener.ClientConnect += ClientConnected; Listener.ClientDisconnect += ClientDisconnect; Listener.ClientMessageReceived += ClientMessageReceived; // Start and don't buffer messages - use events instead Listener.Start(false); Print("Listener started...", ConsoleColor.Green); // Wait for a keypress (to signal exit) while (true) { ConsoleKey Key = Console.ReadKey(true).Key; if (Key == ConsoleKey.Escape) { break; } else if (Key == ConsoleKey.K) { Listener.Send(new TestMessage("kill")); } } // Shut down the server, unhook the handlers Closing = true; Listener.Stop(); Print("Listener stopped...", ConsoleColor.Red); Listener.ClientConnect -= ClientConnected; Listener.ClientDisconnect -= ClientDisconnect; Listener.ClientMessageReceived -= ClientMessageReceived; } catch (Exception e) { // If an exception is fired while the server's shutting down, // it's usually a send error and is safe to ignore if (!Closing) { Print("Error: " + e.ToString(), ConsoleColor.Red); Console.ReadKey(true); } } try { Listener.Dispose(); } catch { } }