//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); } } } }
void ButtonBack_PreviewMouseUp(object sender, MouseButtonEventArgs e) { if (currentCenterId == 0) { return; } Message msg = MessagesKeeper.Get(currentCenterId); if (msg == null) { return; } GoTo(msg.Father); }
//检查用户是否成功登陆 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() + "已创建。"); } }
private void ShowMe() { Message m0; m0 = MessagesKeeper.Get(currentCenterId, 3); if (m0 == null) { return; } if (currentCenterId == 0) { ShowIndex(); } else { ShowMessage(); } }
//连接服务器 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); }
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; } } } }
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); }
//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); } } } }