public void ChangeQuestion(Question q) { string query = "UPDATE Question SET QuestionContext='" + q.content + "', AnswerA='" + q.a + "', AnswerB='" + q.b + "', AnswerC='" + q.c + "', AnswerD='" + q.d + "', CorrectAnswer='" + q.answer + "' WHERE QuestionID=" + q.number + ";"; this.InsertIntoDB(query); }
// static method for the deserialization from byte array to a Question public static Question Deserialize(byte[] buffer) { Question que = new Question(); Stream strm = new MemoryStream(buffer); IFormatter frr = new BinaryFormatter(); que = (Question)frr.Deserialize(strm); return que; }
// static method for serialization from the Question to the byte array public static byte[] Serialize(Question quest) { IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); formatter.Serialize(stream, quest); byte[] buffer = ((MemoryStream)stream).ToArray(); return buffer; }
private void button1_Click(object sender, EventArgs e) { //list of the users List<User> listOfUser = new List<User>(); //a questions Question q = new Question(); GameCounter.Enabled = false; string answer = ""; //increase question count questionCount++; //check to see if a, b, c, d checked if (QuestionA.Checked == true) { answer = "a"; } else if (QuestionB.Checked == true) { answer = "b"; } else if (QuestionC.Checked == true) { answer = "c"; } else if (QuestionD.Checked == true) { answer = "d"; } else { answer = ""; } q.answer = answer; q.time = seconds; seconds = 0; this.myConnectionToServer.Send("!answer"); this.myConnectionToServer.Read(); this.myConnectionToServer.Send(Question.Serialize(q)); //if question count is 11 which is 10 if (questionCount == 11) { //disable everything QuestionA.Checked = false; QuestionB.Checked = false; QuestionC.Checked = false; QuestionD.Checked = false; QuestionGroupBox.Enabled = false; //get leaderboard this.myConnectionToServer.Send("!leaderboard"); //iterate through it to put it in a list while (true) { User newUser = User.Deserialize(myConnectionToServer.ReadObject()); if (newUser.name == "") { break; } else { listOfUser.Add(newUser); myConnectionToServer.Send("!ok"); } } DisplayLeaderboard.AppendText("---- LeaderBoard ----\n"); //display leaderboard foreach (User element in listOfUser) { DisplayLeaderboard.AppendText(element.name + "||" + element.totalPoints.ToString() + "\n"); } NextButton.Enabled = false; //get all answer to the questions this.myConnectionToServer.Send("!allQuestions"); //save it in the list List<Question> qList = new List<Question>(); while (true) { Question newQuestion = Question.Deserialize(myConnectionToServer.ReadObject()); if (newQuestion.content == "") { break; } else { qList.Add(newQuestion); myConnectionToServer.Send("!ok"); } } int numberCount = 0; //display all of the question foreach (Question element in qList) { numberCount++; Questions.AppendText("Question :" + numberCount.ToString() + " " + element.content + " Answer: " + element.answer + "\n"); //.AppendText(element. + "||" + element.totalPoints.ToString() + "\n"); } } else { System.Threading.Thread.Sleep(120); this.myConnectionToServer.Send("!question" + questionCount); byte[] buffer = this.myConnectionToServer.ReadObject(); Question quest = Question.Deserialize(buffer); //display all of the question lbQuestion.Text = "[" + questionCount.ToString() + "] " + quest.content; QuestionA.Text = "A) " + quest.a; QuestionB.Text = "B) " + quest.b; QuestionC.Text = "C) " + quest.c; QuestionD.Text = "D) " + quest.d; GameCounter.Enabled = true; QuestionGroupBox.Enabled = true; } }
public Question GetQuestion(int questionNumber) { Question q = new Question(); string query = "SELECT * FROM Question WHERE QuestionID=" + questionNumber + ";"; this.command.CommandText = query; if (this.connection.State != System.Data.ConnectionState.Open) { this.connection.Open(); } this.reader = this.command.ExecuteReader(); while (this.reader.Read()) { q.number = Convert.ToInt32(this.reader["QuestionID"]); q.content = this.reader["QuestionContext"].ToString(); q.a = this.reader["AnswerA"].ToString(); q.b = this.reader["AnswerB"].ToString(); q.c = this.reader["AnswerC"].ToString(); q.d = this.reader["AnswerD"].ToString(); q.answer = this.reader["CorrectAnswer"].ToString(); } if (this.connection.State == System.Data.ConnectionState.Open) { this.connection.Close(); } return q; }
public List<Question> GetAllQuestions() { List<Question> list = new List<Question>(); string query = "SELECT QuestionID, QuestionContext, AnswerA, AnswerB, AnswerC, AnswerD, CorrectAnswer FROM Question;"; this.command.CommandText = query; this.connection.Open(); this.reader = this.command.ExecuteReader(); while (this.reader.Read()) { Question q = new Question(); q.number = Convert.ToInt32(this.reader["QuestionID"]); q.content = this.reader["QuestionContext"].ToString(); q.a = this.reader["AnswerA"].ToString(); q.b = this.reader["AnswerB"].ToString(); q.c = this.reader["AnswerC"].ToString(); q.d = this.reader["AnswerD"].ToString(); q.answer = this.reader["CorrectAnswer"].ToString(); list.Add(q); } if (this.connection.State == System.Data.ConnectionState.Open) { this.connection.Close(); } return list; }
private void UserInteraction(object usr) { User user = (User)usr; string message = ""; while (true) { try { message = this.connector.Read(user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } Logging.LogEvent("UserInteraction", "User #" + user.id + " said -> " + message); if (message == "") { int count = 1; while (true) { string nMessage = connector.Read(user.socket); if (nMessage == "") { count++; } else { break; } if (count > 20) { message = TCPIPconnector.kClientLeft; break; } } } if (message == "!admin") { TriviaLib.User admin = new TriviaLib.User(); try { this.connector.Send("!ok", user.socket); admin = TriviaLib.User.Deserialize(this.connector.ReadObject(user.socket)); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } try { if (this.DBConnector.ValidateAdmin(admin)) { try { this.connector.Send("!ok", user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } user.name = admin.name; this.AdminInteraction(user); break; } else { try { this.connector.Send("!error", user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } if (message == "!answer") { byte[] buffer = null; try { this.connector.Send("!ok", user.socket); buffer = this.connector.ReadObject(user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } if (buffer != null) { Question quest = Question.Deserialize(buffer); quest.number = user.currentQuestion; Question tmp = null; try { tmp = this.DBConnector.GetQuestion(quest.number); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } if (tmp.answer != quest.answer) { quest.time = 0; } else { quest.time = 20 - quest.time; user.totalScore += quest.time; } try { this.mutex.WaitOne(); this.mutex.Reset(); this.DBConnector.AddUserAnswer(TriviaServer.answerID, user.id, quest.number, quest.answer, quest.time); TriviaServer.answerID++; this.mutex.Set(); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } } if (message == "!leaderboard") { List<TriviaLib.User> list = null; try { list = this.DBConnector.GetLeaderBoard(); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } try { for (int counter = 0; counter < list.Count; counter++) { this.connector.Send(TriviaLib.User.Serialize(list[counter]), user.socket); this.connector.Read(user.socket); } this.connector.Send(TriviaLib.User.Serialize(new TriviaLib.User()), user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } if (message == "!score") { try { this.connector.Send(user.totalScore.ToString(), user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } if (message == "!newUser") { byte[] buffer = null; try { this.connector.Send("!ok", user.socket); buffer = this.connector.ReadObject(user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } if (buffer != null) { TriviaLib.User nUser = TriviaLib.User.Deserialize(buffer); try { user.id = this.DBConnector.AddNewUser(nUser); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } user.name = nUser.name; } } if (message == "!allQuestions") { List<Question> list = null; try { list = this.DBConnector.GetAllQuestions(); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } try { for (int counter = 0; counter < list.Count; counter++) { this.connector.Send(TriviaLib.Question.Serialize(list[counter]), user.socket); this.connector.Read(user.socket); } this.connector.Send(TriviaLib.Question.Serialize(new TriviaLib.Question()), user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } if (message.Length > 9) { if ((message.Substring(0, 9) == "!question") && (message.Length > 9)) { int qId = Convert.ToInt32(message.Substring(9)); if (qId < 11) { Question q = null; try { q = this.DBConnector.GetQuestion(qId); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } q.answer = ""; user.currentQuestion = qId; byte[] buffer = Question.Serialize(q); try { this.connector.Send(buffer, user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } else { Question q = new Question(); byte[] buffer = Question.Serialize(q); try { this.connector.Send(buffer, user.socket); } catch (Exception e) { Logging.LogEvent("UserInteraction", e.Message); break; } } } } if (message == TCPIPconnector.kClientLeft) { Logging.LogEvent("UserInteraction", "Client #" + user.id + " left"); break; } } this.userList.Remove(user); user.socket.Close(); }
private void AdminInteraction(User admin) { string message = ""; while (true) { try { message = this.connector.Read(admin.socket); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } Logging.LogEvent("AdminInteraction", "User #" + admin.id + " said -> " + message); if (message == "") { int count = 1; while (true) { string nMessage = connector.Read(admin.socket); if (nMessage == "") { count++; } else { break; } if (count > 20) { message = TCPIPconnector.kClientLeft; break; } } } if (message == "!leaderboard") { List<TriviaLib.User> list = null; try { list = this.DBConnector.GetLeaderBoard(); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } try { for (int counter = 0; counter < list.Count; counter++) { this.connector.Send(TriviaLib.User.Serialize(list[counter]), admin.socket); this.connector.Read(admin.socket); } this.connector.Send(TriviaLib.User.Serialize(new TriviaLib.User()), admin.socket); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } } if (message == "!data") { List<AdminQuestion> list; if (TriviaServer.answerID > 1) { try { list = this.DBConnector.GetAdminStats(); if (list.Count < 10) { for (int i = list[(list.Count - 1)].number; i < 10; i++) { AdminQuestion q = new AdminQuestion(); q.number = i + 1; q.content = this.DBConnector.GetQuestion(i + 1).content; q.avgTime = 0; q.answered = 0; list.Add(q); } } } catch(Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } } else { list = new List<AdminQuestion>(); } try { for (int counter = 0; counter < list.Count; counter++) { list[counter].answered = list[counter].answered * 100; this.connector.Send(AdminQuestion.Serialize(list[counter]), admin.socket); this.connector.Read(admin.socket); } this.connector.Send(AdminQuestion.Serialize(new AdminQuestion()), admin.socket); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } } if (message.Length > 5) { if ((message.Substring(0, 5) == "!edit") && (message.Length > 5)) { int qId = Convert.ToInt32(message.Substring(5)); if (qId < 11) { Question q = new Question(); try { q = this.DBConnector.GetQuestion(qId); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } byte[] buffer = Question.Serialize(q); Question newQuestion = new Question(); try { this.connector.Send(buffer, admin.socket); newQuestion = Question.Deserialize(this.connector.ReadObject(admin.socket)); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } if ((q.content != newQuestion.content) || (q.answer != newQuestion.answer) || (q.a != newQuestion.a) || (q.b != newQuestion.b) || (q.c != newQuestion.c) || (q.d != newQuestion.d)) { newQuestion.number = q.number; try { this.DBConnector.ChangeQuestion(newQuestion); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } } } else { Question q = new Question(); byte[] buffer = Question.Serialize(q); try { this.connector.Send(buffer, admin.socket); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } } } } if (message == "!live") { try { for (int counter = 0; counter < this.userList.Count; counter++) { TriviaLib.User u = new TriviaLib.User(); u.name = this.userList[counter].name; u.currentQuestion = this.userList[counter].currentQuestion; u.totalPoints = this.userList[counter].totalScore; this.connector.Send(TriviaLib.User.Serialize(u), admin.socket); this.connector.Read(admin.socket); } this.connector.Send(TriviaLib.User.Serialize(new TriviaLib.User()), admin.socket); } catch (Exception e) { Logging.LogEvent("AdminInteraction", e.Message); break; } } if (message == TCPIPconnector.kClientLeft) { Logging.LogEvent("AdminInteraction", "Client #" + admin.id + " left"); break; } } }