예제 #1
0
        //接收服务器响应线程函数
        private void receiveResponseThreadFunction()
        {
            try
            {
                while (true)
                {
                    //接收请求包
                    AbstractXiepPackage recvPackage = XiepIoHelper.ReceivePackage(_networkStream);
                    if (recvPackage == null)
                    {
                        throw new IOException("获取数据包失败。");
                    }

                    //如果是响应数据包
                    if (recvPackage is ResponsePackage)
                    {
                        ResponsePackage responsePackage = (ResponsePackage)recvPackage;
                        String          requestId       = responsePackage.RequestId;
                        lock (_mapRequestResponse)
                        {
                            if (_mapRequestResponse.ContainsKey(requestId))
                            {
                                _mapRequestResponse.Remove(requestId);
                                _mapRequestResponse.Add(requestId, responsePackage);
                            }
                        }
                    } //如果是事件数据包
                    else if (recvPackage is EventPackage)
                    {
                        EventPackage eventPackage = (EventPackage)recvPackage;
                        //触发收到服务器事件的事件
                        if (ServerEventCame != null)
                        {
                            ServerEventCame.BeginInvoke(this, new XiepClientEventArgs(eventPackage), new AsyncCallback(delegate(IAsyncResult iar) { }), null);
                        }
                    }
                }
            }
            catch
            {
                _networkStream = null;
                _socket        = null;

                //触发与服务器连接断开事件
                if (ServerDisconnected != null)
                {
                    //ServerDisconnected.BeginInvoke(this, new System.EventArgs(), new AsyncCallback(delegate(IAsyncResult iar) { }), this);
                    ServerDisconnected.Invoke(this, new System.EventArgs());
                }
            }
        }