Esempio n. 1
0
        /// <summary>
        /// Listen while listener is running
        /// </summary>
        private static void Listen()
        {
            Listener = new TcpListener(IPAddress.Any, ConnectionConfig.clientPort);

            try
            {
                Listener.Start(3);
            }

            catch (SocketException)
            {
                MessageBox.Show("Server kann nicht gestartet werden. Der Port [" + ConnectionConfig.clientPort + "] wird bereits verwendet.\n" +
                                "Mögliche Ursache dafür ist, dass bereits ein REEChat Client auf diesem Gerät läuft!");
                CFormController.LoginClose();
            }

            while (Running)
            {
                try
                {
                    TcpClient server        = Listener.AcceptTcpClient();
                    string    serverAddress = ((IPEndPoint)server.Client.RemoteEndPoint).Address.ToString();

                    NetworkStream stream = server.GetStream();

                    while (server.Available == 0)
                    {
                    }

                    byte[] buffer = new byte[server.Available];
                    stream.Read(buffer, 0, buffer.Length);

                    stream.Close();

                    int i = Package.TryParse(buffer, out Package package);
                    if (i == 0)
                    {
                        CDataController.ProcessingReceivedPackage(package, serverAddress);
                    }
                }
                catch (SocketException)
                {
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Processes a received package
        /// </summary>
        /// <param name="package">received package</param>
        /// <param name="address">address of the sender of the package</param>
        internal static void ProcessingReceivedPackage(Package package, string address)
        {
            //sender != server
            if (CConnectionController.ServerAddress != address)
            {
                return;
            }

            //Not logged in
            if (!CFormController.LoggedIn)
            {
                if (CFormController.RegistrationView != null)
                {
                    if (package is Feedback feedback)
                    {
                        switch (feedback.FeedbackCode)
                        {
                        case FeedbackCode.InternalServerError:
                            CFormController.RegistrationView.WaitForFeedback = false;
                            MessageBox.Show("Der Server hat interne Probleme!");
                            break;

                        case FeedbackCode.RegistrationDenied:
                            CFormController.RegistrationView.WaitForFeedback = false;
                            MessageBox.Show("Der Registrierungsanfrage wurde abgelehnt!");
                            break;

                        case FeedbackCode.RegistrationDeniedEmailAlreadyUsed:
                            CFormController.RegistrationView.WaitForFeedback = false;
                            MessageBox.Show("Email wird bereits verwendet!");
                            break;

                        case FeedbackCode.RegistrationAccepted:
                            CFormController.RegistrationView.WaitForFeedback = false;
                            MessageBox.Show("Registrierung erfolgreich!");
                            CFormController.RegistrationClose();
                            break;
                        }
                    }
                }
                else
                {
                    if (package is UserList userList)
                    {
                        Users = userList.List;
                        MessageBox.Show("Login erfolgreich!");
                        CFormController.LoginClose();
                    }
                    else if (package is Feedback feedback)
                    {
                        switch (feedback.FeedbackCode)
                        {
                        case FeedbackCode.InternalServerError:
                            CFormController.LoginView.WaitForFeedback = false;
                            MessageBox.Show("Der Server hat interne Probleme!");
                            break;

                        case FeedbackCode.LoginDenied:
                            CFormController.LoginView.WaitForFeedback = false;
                            MessageBox.Show("Login verweigert! Falsche Anmeldedaten!");
                            break;
                        }
                    }
                }
            }
            else
            {
                if (package is UserList userList)
                {
                    Users = userList.List;
                    CFormController.MainView.UpdateUser();
                }
                else if (package is MessageList messageList)
                {
                    foreach (MessagePackage k in messageList.List)
                    {
                        Messages.Add(new Message(k));
                    }
                    CFormController.MainView.UpdateMessage();
                }
                else if (package is ReceiveTextMessage receiveTextMessage)
                {
                    CFormController.MainView.WaitForFeedback = false;
                    Messages.Add(new Message(receiveTextMessage.EMail, CConnectionController.LoginUser.Email, DateTime.Now, receiveTextMessage.Text));
                    CFormController.MainView.UpdateMessage();
                }
                else if (package is Feedback feedback)
                {
                    switch (feedback.FeedbackCode)
                    {
                    case FeedbackCode.InternalServerError:
                        CFormController.MainView.WaitForFeedback = false;
                        MessageBox.Show("Der Server hat interne Probleme!");
                        break;

                    case FeedbackCode.InvalidSession:

                        break;

                    case FeedbackCode.MessageSendSuccess:
                        CFormController.MainView.WaitForFeedback = false;
                        CFormController.MainView.SetText("");
                        break;

                    case FeedbackCode.MessageSendFailed:
                        CFormController.MainView.WaitForFeedback = false;
                        MessageBox.Show("Die Nachricht konnte nicht gesendet werden!");
                        break;
                    }
                }
            }
        }