Exemple #1
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;
                    }
                }
            }
        }