bool ImyCallBack.ServerSendData(ydhDeliver dler) { //检测上传是否重复. if (myList.Any(x => x.Name == dler.Name && x.Index == dler.Index)) { foreach (var item in myList.Where(x => x.Name == dler.Name && x.Index == dler.Index)) { myList.Remove(item); } } //保存 myList.Add(dler); //最终拼接. if (dler.IsFinish) { //这里再2015-11-13发现了一个边界bug,当传输的数据正好到达边界后,服务端还会再传输一个byte[0]的dler过来,需要处理掉 if (dler.Context.Count() == 0) { return(true); } var re = myList.Where(x => x.Name == dler.Name).OrderBy(x => x.Index); List <byte> mybt = new List <byte>(); foreach (var item in re) { mybt.AddRange(item.Context.ToList()); } switch (dler.FunctionName) { case "Json": string mjson = IoRyClass.BytesToString(mybt.ToArray()); if (eAsnyCallBll != null) { this.eAsnyCallBll(mjson, this._obj); } break; } myList.Clear(); } if (eGetDeliver != null) { this.eGetDeliver(dler); } return(true); }
/// <summary> /// Callback 成员 /// </summary> /// <param name="dler"></param> /// <returns></returns> public bool ServerSendData(ydhDeliver dler) { //检测上传是否重复. if (myList.Any(x => x.Name == dler.Name && x.Index == dler.Index)) { foreach (var item in myList.Where(x => x.Name == dler.Name && x.Index == dler.Index)) { myList.Remove(item); } } //保存 myList.Add(dler); if (myProgressBar != null) { if (myProgressBar.Value < myProgressBar.Maximum) { myProgressBar.Value++; } } //最终拼接. if (dler.IsFinish) { //这里再2015-11-13发现了一个边界bug,当传输的数据正好到达边界后,服务端还会再传输一个byte[0]的dler过来,需要处理掉 if (dler.Context.Count() == 0) { return(true); } var re = myList.Where(x => x.Name == dler.Name).OrderBy(x => x.Index); List <byte> mybt = new List <byte>(); foreach (var item in re) { mybt.AddRange(item.Context.ToList()); } switch (dler.FunctionName) { case "DataSet": DataSet DS = IoRyClass.RetrieveXmlDataSet(mybt.ToArray()); if (myDataGridView != null) { myDataGridView.DataSource = DS.Tables[0]; } if (myAsnyGetDataSet != null) { this.myAsnyGetDataSet(DS, obj); } break; case "GetFolderXml": string xml = IoRyClass.BytesToString(mybt.ToArray()); if (DuxMessage != null) { this.DuxMessage(xml, "GetFolderXml"); } break; case "CheckUpdateFiles": try { File.WriteAllBytes(System.AppDomain.CurrentDomain.BaseDirectory + dler.Name, mybt.ToArray()); } catch (Exception me) { if (DuxMessage != null) { this.DuxMessage(me.Message, "Error"); } } break; } if (myProgressBar != null) { myProgressBar.Visible = false; myProgressBar.Value = 0; } if (MyButtons.Count != 0) { foreach (Button item in MyButtons) { item.Enabled = true; } } myList.Clear(); } if (eGetDeliver != null) { this.eGetDeliver(ConvertDeliver(dler)); } return(true); }
//传送byte[]类 void Bytes_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { byte[] bb = (byte[])e.Argument; int maxchangdu = (bb.Length / Maxupload) + 1; mCB.ServerSendMessage("FilesCount", mycorrect(maxchangdu.ToString(), "FilesCount")); ydhDeliver mydl = new ydhDeliver(); mydl.Name = "Json"; mydl.FunctionName = "Json"; mydl.DataType = "string"; mydl.Max = maxchangdu; //2015-11-13 修改了一个边界问题,去掉了下面的等于号 for (int i = 0; i *Maxupload < bb.LongLength; i++) { if (bb.LongLength > (i + 1) * Maxupload) { //通过计算int的范围,可知目前最大支持传2G的文件. mydl.Context = bb.Skip(i * Maxupload).Take(Maxupload).ToArray(); mydl.IsFinish = false; } else { mydl.Context = bb.Skip(i * Maxupload).Take(Convert.ToInt32(bb.LongLength) - i * Maxupload).ToArray(); mydl.IsFinish = true; } mydl.Index = i; mydl.Now = i; int mycount = 0; try { while (!mCB.ServerSendData(mydl)) { mCB.ServerSendData(mydl); mycount++; if (mycount > 10) { mCB.ServerSendMessage("FilesDelivering", mywrong("DataSend Failed!;网络不通畅,连续重发10次失败!")); return; } } } catch (Exception me) { string exmsg = ""; while (me.InnerException != null) { exmsg += me.Message + "\r\n------>\r\n"; me = me.InnerException; } exmsg += me.Message; ConsoleErrorMsg(AddMsgClient("用户调用Bytes_DoWork,Error报错:" + exmsg, myTransport.ServiceToClient)); //有时候断了,就根本发不出去了,这里会异常 try { mCB.ServerSendMessage("FilesDelivering", mywrong("DataSend Failed!;" + exmsg)); } catch { } return; } } }
bool ImyService.ClientSendData(ydhDeliver dler) { throw new NotImplementedException(); }