using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace LYFZ.Software.MainBusiness.MultipleFileImport
{
    public class frmFtpThread
    {
        static frmFtpThread single = null;
        System.Threading.Thread thread;
        /// <summary>
        /// 开始上传事件
        /// </summary>
        public delegate void StartUpDataHandler();
        public event StartUpDataHandler StartUpDataEvent;
        /// <summary>
        /// 结束上传时间
        /// </summary>
        public delegate void EndtartUpDataHandler();
        public event EndtartUpDataHandler EndtartUpDataEvent;

        List<FTPDataModel> FTPFileList = new List<FTPDataModel>();

        public frmFtpThread()
        { 
            
        }
        public static frmFtpThread GetSingleton()
        {
            if(single==null)
            {
                single = new frmFtpThread();
            }
            return single;
        }
        public void SendDataToService(string jsonData)
        {
            FTPDataModel mod = new FTPDataModel()
            {
                b = false,
                strJson = jsonData
            };
            AddFTPFileDataToList(mod);
        }

        void AddFTPFileDataToList(FTPDataModel mod)
        {
            FTPFileList.Add(mod);
            StartThread();
        }

        public void StartThread()
        {
            try
            {
                if (thread == null || thread.ThreadState == ThreadState.Aborted)
                {
                    ///线程启动处理;
                    thread = new Thread(new ThreadStart(delegate()
                    {
                        for (int i = 0; i < FTPFileList.Count; i++)
                        {
                            if (!FTPFileList[i].b)
                            {
                                if (StartUpDataEvent != null)
                                {
                                    StartUpDataEvent();
                                }
                                FTPFileList[i].b = true;
                                HPSocketCS.Extended.RequestData requestData = new HPSocketCS.Extended.RequestData((int)LYFZ.Network.TCPNetworkServer.SerializerRequestCommand.FTPCommand);
                                requestData.AttachedMessage = FTPFileList[i].strJson;
                                HPSocketCS.Extended.ReturnData returnData = HPSocketCS.Extended.SerializerDataProcessed.HP_SendSerializerCommandToServer(requestData);
                                FileUtil.WriteFile(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\Log\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt",returnData.ReturnStatus+"--"+ FTPFileList[i].strJson);
                                
                                if (EndtartUpDataEvent != null)
                                {
                                    EndtartUpDataEvent();
                                }
                            }
                        }
                    }));
                    thread.Start();
                }
                else if (thread.ThreadState == ThreadState.Stopped )
                {
                    thread = null;
                    StartThread();
                }
            }
            catch(Exception e) {
                MessageBoxCustom.Show("出现异常,请重新提交Ftp传片数据!!");
                FileUtil.WriteFile(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\Log\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt", e.Message);
                if (EndtartUpDataEvent != null)
                {
                    EndtartUpDataEvent();
                }
            }
        }
    }
    class FTPDataModel {
        public string strJson { get; set; }
        public bool b { get; set; }
    }

}