Esempio n. 1
0
        //Index页面下的UI控制
        private void ShowIndex()
        {
            scrollIndex.Visibility    = Visibility.Visible;
            scrollMessages.Visibility = Visibility.Collapsed;

            Message m0 = MessagesKeeper.Get(0);

            if (m0 == null)
            {
                MessageBox.Show("数据加载中,请稍后……");
                return;
            }

            foreach (int sonId in m0.SonsId)
            {
                Message m1 = MessagesKeeper.Get(sonId);
                if (m1 != null)
                {
                    ScrollViewer sv = getIndexTextBlock(m1);
                    if (!stackPanel.Children.Contains(sv))
                    {
                        stackPanel.Children.Add(sv);
                        MainGrid.RegisterName("scrollViewerIndex" + m1.Id, sv);
                    }
                }
            }
        }
Esempio n. 2
0
        void ButtonBack_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            if (currentCenterId == 0)
            {
                return;
            }
            Message msg = MessagesKeeper.Get(currentCenterId);

            if (msg == null)
            {
                return;
            }
            GoTo(msg.Father);
        }
Esempio n. 3
0
 //检查用户是否成功登陆
 static public void Login(JObject j)
 {
     if (j["user"].ToString().Equals("wrong"))
     {
         loginFlag     = false;
         wrongPassword = true;
         MessagesKeeper.Reset();
         ClientSocket.Stop();
     }
     else if (j["user"].ToString().Equals("accept"))
     {
         loginFlag = true;
     }
     else if (j["user"].ToString().Equals("new"))
     {
         loginFlag = true;
         InfoBox.AddInfo("新用户" + j["nickname"].ToString() + "已创建。");
     }
 }
Esempio n. 4
0
        private void ShowMe()
        {
            Message m0;

            m0 = MessagesKeeper.Get(currentCenterId, 3);
            if (m0 == null)
            {
                return;
            }

            if (currentCenterId == 0)
            {
                ShowIndex();
            }
            else
            {
                ShowMessage();
            }
        }
Esempio n. 5
0
        //连接服务器
        public static int ConnectServer(string name, string password = "")
        {
            user = new User(name, password);

            IPAddress  ip  = IPAddress.Parse(host);
            IPEndPoint ipe = new IPEndPoint(ip, port);

            soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                soc.Connect(ipe);
            }
            catch (SocketException e)
            {
                System.Windows.MessageBox.Show("服务器连接错误!请检查服务器地址:" + host + ":" + port.ToString());
                return(1);
            }

            sendUserInfo();
            startListening();
            MessagesKeeper.Get(0, 3);

            return(0);
        }
Esempio n. 6
0
        static private void listenServer()
        {
            while (true)
            {
                byte[] result        = new byte[1024];
                int    receiveLength = 0;

                try
                {
                    if (soc != null)
                    {
                        receiveLength = soc.Receive(result);
                    }
                    else
                    {
                        throw new SocketException();
                    }
                }
                catch (SocketException e)
                {
                    InfoBox.AddInfo("服务器连接错误!您已离线。[Listening failed]");
                    return;
                }

                string s = Encoding.UTF8.GetString(result, 0, receiveLength);

                while (s.Contains("}"))
                {
                    try
                    {
                        int t = 0, cnt = 0;
                        while (s[t] != '{' && t < s.Length)
                        {
                            ++t;
                        }
                        ++cnt;
                        while (cnt > 0 && t < s.Length - 1)
                        {
                            ++t;
                            if (s[t] == '{')
                            {
                                ++cnt;
                            }
                            if (s[t] == '}')
                            {
                                --cnt;
                            }
                        }

                        if (t >= s.Length)
                        {
                            break;
                        }

                        string s0 = s.Substring(0, t + 1);
                        s = s.Substring(t + 1);
                        JObject j;

                        j = (JObject)JsonConvert.DeserializeObject(s0);

                        if (j["action"].ToString().Equals("send"))
                        {
                            InfoBox.AddInfo(j["content"].ToString());
                        }
                        else if (j["action"].ToString().Equals("get"))
                        {
                            MessagesKeeper.RefreshMessage(j);
                        }
                        else if (j["action"].ToString().Equals("user"))
                        {
                            User.Login(j);
                        }
                    }
                    catch
                    {
                        Console.WriteLine("数据解析失败。");
                        break;
                    }
                }
            }
        }
Esempio n. 7
0
        private ScrollViewer getTextBlock(Message msg, int level = 0)
        {
            ScrollViewer sv = null;
            TextBlock    tb = null;

            //查找目标UI是否已存在于容器
            sv = MainGrid.FindName("scrollViewer" + msg.Id) as ScrollViewer;
            if (sv == null)
            {
                //没有找到,新建UI
                sv = new ScrollViewer();
                tb = new TextBlock();

                sv.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
                tb.TextWrapping = TextWrapping.Wrap;
                tb.Inlines.Add(new Bold(new Run(msg.SenderName + ": ")));
                tb.Inlines.Add(new Run(msg.Content));
                tb.Background = new SolidColorBrush(msg.Color);
                tb.MouseUp   += tb_MouseUp;

                tb.MouseEnter += tb_MouseEnter;
                tb.MouseLeave += tb_MouseLeave;

                tb.Tag = msg;

                sv.Content = tb;
                sv.Tag     = currentCenterId;
            }
            else
            {
                ////已经正常显示则不修改
                if (sv.IsVisible && (int)sv.Tag == currentCenterId)
                {
                    return(sv);
                }
                //否则进行微调
                tb = sv.Content as TextBlock;
            }

            sv.Height   = msg.Size(level);
            sv.Width    = msg.Size(level);
            sv.Tag      = currentCenterId;
            tb.FontSize = msg.FontSize(level);

            if (level == 0 || level == 1)
            {
                //正常显示
                tb.Background = new SolidColorBrush(msg.Color);
                tb.Foreground = Brushes.Black;
            }
            else
            {
                //弱显示
                tb.Background = new SolidColorBrush(msg.LightColor);
                tb.Foreground = new SolidColorBrush(Message.LightFontColor);
            }

            if (!sv.IsVisible)
            {
                if (level == 0)
                {
                    //正中间
                    sv.Margin = new Thickness(0);
                }
                else if (level >= -1)
                {
                    //儿子位置正关联
                    ScrollViewer sv0 = MainGrid.FindName("scrollViewer" + msg.Father) as ScrollViewer;
                    if (sv0 != null)
                    {
                        double distance = sv0.Width + sv.Width;// -randomMove / 2 + random.Next(randomMove);
                        sv.Margin = Message.Position(msg.Place, distance, sv0.Margin);
                    }
                }
                else if (level == -2)
                {
                    //父亲位置负关联
                    ScrollViewer sv0 = MainGrid.FindName("scrollViewer" + currentCenterId) as ScrollViewer;
                    Message      m0  = MessagesKeeper.Get(currentCenterId);
                    if (sv0 != null && m0 != null)
                    {
                        double distance = sv0.Width + sv.Width;// -randomMove / 2 + random.Next(randomMove);
                        sv.Margin = Message.Position(m0.Place, distance, sv0.Margin, -1);
                    }
                }
            }

            sv.Visibility = Visibility.Visible;

            return(sv);
        }
Esempio n. 8
0
        //Message页面下的UI控制
        private void ShowMessage()
        {
            scrollIndex.Visibility    = Visibility.Collapsed;
            scrollMessages.Visibility = Visibility.Visible;

            Message m0 = MessagesKeeper.Get(currentCenterId);

            if (m0 == null)
            {
                MessageBox.Show("数据加载中,请稍后……");
                return;
            }

            //自己
            ScrollViewer sv0 = getTextBlock(m0, 0);

            if (!gridMessages.Children.Contains(sv0))
            {
                gridMessages.Children.Add(sv0);
                gridMessages.RegisterName("scrollViewer" + m0.Id, sv0);
            }

            //父亲
            if (m0.Father != 0)
            {
                Message      m_2  = MessagesKeeper.Get(m0.Father);
                ScrollViewer sv_2 = getTextBlock(m_2, -2);
                if (!gridMessages.Children.Contains(sv_2))
                {
                    gridMessages.Children.Add(sv_2);
                    gridMessages.RegisterName("scrollViewer" + m0.Father, sv_2);
                }

                foreach (int sonId in m_2.SonsId)
                {
                    //兄弟
                    Message m_1 = MessagesKeeper.Get(sonId);
                    if (m_1 == null || m_1.Id == currentCenterId)
                    {
                        continue;
                    }
                    ScrollViewer sv_1 = getTextBlock(m_1, -1);
                    if (!gridMessages.Children.Contains(sv_1))
                    {
                        gridMessages.Children.Add(sv_1);
                        gridMessages.RegisterName("scrollViewer" + m_1.Id, sv_1);
                    }
                }
            }

            //儿子
            foreach (int sonId in m0.SonsId)
            {
                Message m1 = MessagesKeeper.Get(sonId);
                if (m1 == null)
                {
                    continue;
                }
                ScrollViewer sv1 = getTextBlock(m1, 1);
                if (!gridMessages.Children.Contains(sv1))
                {
                    gridMessages.Children.Add(sv1);
                    gridMessages.RegisterName("scrollViewer" + m1.Id, sv1);
                }

                //孙子
                foreach (int sonsonId in m1.SonsId)
                {
                    Message m2 = MessagesKeeper.Get(sonsonId);
                    if (m2 == null)
                    {
                        continue;
                    }
                    ScrollViewer sv2 = getTextBlock(m2, 2);
                    if (!gridMessages.Children.Contains(sv2))
                    {
                        gridMessages.Children.Add(sv2);
                        gridMessages.RegisterName("scrollViewer" + m2.Id, sv2);
                    }
                }
            }
        }