/// <summary> /// 连接服务器异步回调 /// </summary> private void ConnCallBackF(IAsyncResult ar) { StateObject stateObject = (StateObject)ar.AsyncState; try { stateObject.newClient.EndConnect(ar); stateObject.listViewModel.DownName = "连接成功."; ConnectParam connectParam = new ConnectParam(stateObject.newClient); connectParam.bw.Write(stateObject.gameID); //发送游戏ID connectParam.stateObject = stateObject; downViewModel.connectList.Add(connectParam); stateObject.listViewModel.DownName = "准备接收."; ReceiveFileDelegate d = new ReceiveFileDelegate(ReceiveData); d.BeginInvoke(connectParam, new AsyncCallback(CallBackF), null); } catch (Exception ex) { Application.Current.Dispatcher.Invoke(new Action(() => { XWT.MessageBox.Show("未能与服务器取得连接!错误:" + ex.Message, "提示", MessageBoxButton.OK, MessageBoxImage.Error); downViewModel.AllDowns.Remove(stateObject.listViewModel); this.Close(); }), System.Windows.Threading.DispatcherPriority.Normal); } }
/// <summary> /// 发送文件异步回调 /// </summary> private void CallBackF(IAsyncResult arr) { AsyncResult ar = (AsyncResult)arr; ReceiveFileDelegate d = (ReceiveFileDelegate)ar.AsyncDelegate; try { d.EndInvoke(arr); } catch { } }
/// <summary> /// 连接服务器异步回调 /// </summary> public void ConnCallBackF(IAsyncResult ar) { TcpClient newClient = (TcpClient)ar.AsyncState; try { newClient.EndConnect(ar); //连接成功 viewModel.ConnectStatus = "连接成功..."; ConnectParam connectParam = new ConnectParam(newClient); CreateTempPath(connectParam.tempPath);//创建缓存路径 viewModel.ConnectStatus = "准备接收文件..."; ReceiveFileDelegate d = new ReceiveFileDelegate(ReceiveData); d.BeginInvoke(connectParam, new AsyncCallback(CallBackF), null); } catch { MessageBox.Show("未能与服务器取得连接!"); } }
/// <summary> /// Constructor for this class /// </summary> /// <param name="peerAddress">The peer Ip Address</param> /// <param name="peerPort">The peer listen port</param> public PeerReceiverConnectionHandler(string peerAddress,ushort peerPort) { _peerAddress = peerAddress; _peerPort = peerPort; fileListDelegate = new GetFileListDelegate(GetFileList); receiveFileDelegate = new ReceiveFileDelegate(ReceiveFile); }