Esempio n. 1
0
        public frmMain()
        {
            InitializeComponent();

            this.Width = 613;       // Set client width
            this.Height = 302;      // Set client height

            mSettings = new Settings();
            mUser = new User();

            mQuestion = new question();
            mAnswer = new Answer();
            mDictionarySerialiser = new DictionarySerialiserMethods();

            if (LoadUserSettings("usersettings.xml") == false)
            {
                mSettings.UserName = "******";
                mSettings.ServerIP = txtServerAddress.Text;
                mSettings.ServerPort = txtServerPort.ToString();
                mSettings.AutoLogin = false;

                SaveUserSettings(mSettings);
            }
            else
            {
                if (mSettings.AutoLogin == true)
                    StartConnectionThread();
                else
                {
                    txtUsername.Text = mSettings.UserName;
                    txtServerAddress.Text = mSettings.ServerIP;
                    txtServerPort.Text = mSettings.ServerPort;
                    chkStayLoggedIn.Checked = mSettings.AutoLogin;
                }
            }
        }
Esempio n. 2
0
        // New XML based Login system
        private void TutorLogin(string prUsername, string prPassword)
        {
            DictionarySerialiserMethods iDictionarySerialiser = new DictionarySerialiserMethods();
            transferrableUserDetails iUserDetailsToSend = new transferrableUserDetails();

            iUserDetailsToSend.Username = prUsername;
            iUserDetailsToSend.Password = prPassword;
            iUserDetailsToSend.UserRole = "Tutor";
            iUserDetailsToSend.DeviceOS = "WIN7";

            // Tutor Login
            byte[] iData = iDictionarySerialiser.ConvertUserDetailsToByteArray(iUserDetailsToSend);

            // Possibly unreliable method of testing. For now assume that if the connection
            // is writable that the data was sent.
            // TODO: Implement a check of some sort.
            if (mStream.CanWrite)
            {
                mStream.Write(iData, 0, iData.Length);
                mLoggedIn = true;
            }
            else
            {
                mLoggedIn = false;
            }
        }
Esempio n. 3
0
        private void SendOutput()
        {
            DictionarySerialiserMethods iDictionarySerialiser = new DictionarySerialiserMethods();

            while (!mShouldStopThread)
            {
                if (mQuestionManager.QuestionsToSend.Count > 0)
                {
                    // Pop a question off the queue
                    question iQuestion = mQuestionManager.QuestionsToSend.Dequeue();

                    byte[] iQuestionArray = iDictionarySerialiser.ConvertQuestionToByteArray(iQuestion);
                    if (iQuestionArray != null)
                        mStream.Write(iQuestionArray, 0, iQuestionArray.Length);
                }

                if (mInstructionStringToSend != null)
                {
                    byte[] iByteArray = System.Text.Encoding.ASCII.GetBytes(mInstructionStringToSend);
                    mStream.Write(iByteArray, 0, iByteArray.Length);
                    mInstructionStringToSend = null;
                }

                if (mChatMessageToSend != null)
                {
                    byte[] iMessageArray = iDictionarySerialiser.ConvertChatMessageToByteArray(mChatMessageToSend);
                    if (iMessageArray != null)
                        mStream.Write(iMessageArray, 0, iMessageArray.Length);

                    Array.Clear(iMessageArray, 0, iMessageArray.Length);
                    mChatMessageToSend = null;
                }
                Thread.Sleep(10);
            }
        }
Esempio n. 4
0
        // Listen for incoming data
        public void Listen()
        {
            Byte[] iData;
            string iInputString = "";
            DictionarySerialiserMethods iDictionarySerialiser = new DictionarySerialiserMethods();
            int iBytesRecv = 0;

            while (!mShouldStopThread)
            {
                try
                {
                    iData = new Byte[32768];
                    iBytesRecv = mStream.Read(iData, 0, iData.Length);
                }
                catch (System.Exception ex)
                {
                    // Server has gone offline
                    mIsConnected = false;
                    //StopConnections();
                    break;
                }

                // Server has gone offline
                if (iBytesRecv == 0)
                {
                    mIsConnected = false;
                    StopConnections();
                    break;
                }

                if (iBytesRecv > 0)
                {
                    char iContents = GetDataContents(iData);

                    if (iContents == 'u')   // User
                    {
                        mUserManager.UsersOnline = iDictionarySerialiser.ConvertByteArrayToUserDict(iData);
                        mUserManager.NewUserDataAvailable = true;
                    }
                    else if (iContents == 'q')  // Question
                    {
                        mQuestionManager.QuestionList = iDictionarySerialiser.ConvertByteArrayToQuestionDict(iData);
                        mQuestionManager.NewQuestionDataAvailable = true;
                    }
                    else if (iContents == 'a')  // Answer
                    {
                        mAnswerManager.AddAnswer(iDictionarySerialiser.ConvertStringToAnswer(new string(Encoding.ASCII.GetChars(iData)).Replace("\0", "")));
                    }
                    else if (iContents == 'c')  // Connection response
                    {
                        mConnectionResponse = new string(Encoding.ASCII.GetChars(iData)).Replace("\0", "");
                    }
                    else if (iContents == 'm')  // Chat message
                    {
                        ChatMessage iNewMessage = iDictionarySerialiser.ConvertStringToChatMessage(
                            new string(Encoding.ASCII.GetChars(iData)).Replace("\0", ""));

                        mChatManager.ChatMessages.Enqueue(iNewMessage);
                    }

                    Array.Clear(iData, 0, iData.Length);
                }

                // To prevent the CPU from running at 50-100% constantly sleep the thread for 10 milliseconds
                Thread.Sleep(10);
            }
        }
Esempio n. 5
0
        public frmMain()
        {
            InitializeComponent();

            mMessageLogger = new MessageLogger();
            mChatManager = new ChatManager();
            mUserManager = new UserManager(mMessageLogger);
            mQuestionManager = new QuestionManager(mUserManager);
            mAnswerManager = new AnswerManager();
            mIOProcessor = new IOProcessor(mMessageLogger, mUserManager,
                mQuestionManager, mAnswerManager, mChatManager);

            //mIOProcessor = new IOProcessor(mMessageLogger, mUserManager);
            mNetwork = new Network(mMessageLogger, mUserManager, mQuestionManager, mAnswerManager, mIOProcessor);

            // Load the registered tutors
            if (!mUserManager.LoadTutors("tutors.xml"))
            {
                mMessageLogger.NewMessage("Can't load file \"tutors.xml\" or the contents in it. " +
                    "Please use the admin tool to recreate it", mMessageLogger.MESSAGE_ERROR);
            }

            mUser = new User();

            mRunning = true;

            mDictionarySerialiser = new DictionarySerialiserMethods();

            // Attempt to load questions from the questions.xml file
            if (LoadQuestions("questions.xml") == false)
            {
                // Add some demo questions if none could be loaded from a file
                question iDemoQuestion = new question();

                // Multi-choice
                iDemoQuestion.QuestionID = 0;
                iDemoQuestion.Question = "How many days in a week?";
                iDemoQuestion.QuestionType = "MC";
                iDemoQuestion.PossibleAnswers = new string[4] { "Ten", "Three", "Seven", "Nine" };
                iDemoQuestion.Answer = "Seven";
                mQuestionManager.AddNewQuestion(iDemoQuestion);

                // True/False
                iDemoQuestion = new question();
                iDemoQuestion.QuestionID = 1;
                iDemoQuestion.Question = "Fire burns?";
                iDemoQuestion.QuestionType = "TF";
                iDemoQuestion.PossibleAnswers = new string[4] { "True", "False", "", "" };
                iDemoQuestion.Answer = "True";
                mQuestionManager.AddNewQuestion(iDemoQuestion);

                // Short Answer
                iDemoQuestion = new question();
                iDemoQuestion.QuestionID = 2;
                iDemoQuestion.Question = "What is 5x5?";
                iDemoQuestion.QuestionType = "SA";
                iDemoQuestion.PossibleAnswers = new string[4] { "", "", "", "" };
                iDemoQuestion.Answer = "";
                mQuestionManager.AddNewQuestion(iDemoQuestion);
            }
            mTimer = new System.Timers.Timer(1000);
            mTimer.Elapsed += new ElapsedEventHandler(TimeElapsed);
            mTimer.Enabled = true;
        }
Esempio n. 6
0
        // User authentication
        private void AttemptLogin(string prUsername, string prIPAddress, int mPort)
        {
            DictionarySerialiserMethods iDictionarySerialiser = new DictionarySerialiserMethods();
            transferrableUserDetails iUserDetailsToSend = new transferrableUserDetails();

            iUserDetailsToSend.Username = prUsername;
            iUserDetailsToSend.Password = "";           // Passwords currently not implemented for students
            iUserDetailsToSend.UserRole = "Student";
            iUserDetailsToSend.DeviceOS = "WIN7";

            // Tutor Login
            byte[] iData = iDictionarySerialiser.ConvertUserDetailsToByteArray(iUserDetailsToSend);

            // Possibly unreliable method of testing. For now assume that if the connection
            // is writable that the data was sent.
            // TODO: Implement a check of some sort.
            if (mStream.CanWrite)
            {
                mStream.Write(iData, 0, iData.Length);
                mLoggedIn = true;
            }
            else
            {
                mLoggedIn = false;
            }

            // Start Listening for data
            mListenThread = new Thread(new ThreadStart(ListenForData));
            mListenThread.Start();
        }