Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        //传送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;
                }
            }
        }
Ejemplo n.º 4
0
 bool ImyService.ClientSendData(ydhDeliver dler)
 {
     throw new NotImplementedException();
 }