/// <summary>
        /// 打包表格
        /// </summary>
        /// <param name="version">版本</param>
        /// <returns>Zip包缓冲区</returns>
        public static byte[] PackTable(string version)
        {
            using (MemoryStream memory = new MemoryStream())
            {
                using (ZipOutputStream stream = new ZipOutputStream(memory))
                {
                    byte[] buffer = null;

                    // 服务器列表
                    if (!string.IsNullOrEmpty(version) && version[version.Length - 1] != '/')
                    {
                        version = version + '/';
                    }

                    foreach (var data in ServerListConfig.DataList)
                    {
                        string md5Path   = version + "updateex/" + data.Name + "/";
                        string tablePath = md5Path + TableManager.Directory;

                        TableManager.ClearMD5Record();

                        // 活动
                        List <mw.ActivityConfig> Updateactivitytable = GMTActivityMananger.GetTableActivity().Values.ToList();
                        if (null != Updateactivitytable)
                        {
                            buffer = TableManager.Serialize(Updateactivitytable);
                            TableManager.UpdateMD5(buffer, TableManager.Directory + "ActivityExConfig.protodata.bytes");
                            stream.PutNextEntry(new ZipEntry(tablePath + "ActivityExConfig.protodata.bytes"));
                            stream.Write(buffer, 0, buffer.Length);
                        }

                        List <mw.AchieveConfig> Updateachievetable = GMTActivityMananger.GetTableAchieve().Values.ToList();
                        if (null != Updateachievetable)
                        {
                            buffer = TableManager.Serialize(Updateachievetable);
                            TableManager.UpdateMD5(buffer, TableManager.Directory + "AchieveExConfig.protodata.bytes");
                            stream.PutNextEntry(new ZipEntry(tablePath + "AchieveExConfig.protodata.bytes"));
                            stream.Write(buffer, 0, buffer.Length);
                        }

                        List <mw.RewardConfig> Updaterewardtable = GMTActivityMananger.GetTableReward().Values.ToList();
                        if (null != Updaterewardtable)
                        {
                            buffer = TableManager.Serialize(Updaterewardtable);
                            TableManager.UpdateMD5(buffer, TableManager.Directory + "RewardExConfig.protodata.bytes");
                            stream.PutNextEntry(new ZipEntry(tablePath + "RewardExConfig.protodata.bytes"));
                            stream.Write(buffer, 0, buffer.Length);
                        }

                        // 文本
                        buffer = TableManager.Serialize(TextManager.GetConfigList());
                        TableManager.UpdateMD5(buffer, TableManager.Directory + "UIDescExConfig.protodata.bytes");
                        stream.PutNextEntry(new ZipEntry(tablePath + "UIDescExConfig.protodata.bytes"));
                        stream.Write(buffer, 0, buffer.Length);

                        buffer = Encoding.UTF8.GetBytes(TableManager.GetMD5Text());
                        stream.PutNextEntry(new ZipEntry(md5Path + "md5.txt"));
                        stream.Write(buffer, 0, buffer.Length);
                    }

                    stream.CloseEntry();
                    stream.Finish();

                    byte[] zipBuffer = new byte[memory.Length];
                    Array.Copy(memory.GetBuffer(), zipBuffer, zipBuffer.Length);

                    return(zipBuffer);
                }
            }
        }
        /// <summary>
        /// 发送表格
        /// </summary>
        /// <param name="version">版本号</param>
        /// <returns>是否成功</returns>
        public static bool SendTable(string version)
        {
            byte[] buffer = null;
            errorText = "";

            foreach (var data in ServerListConfig.DataList)
            {
                string md5Path   = version + "/updateex/" + data.Name + "/";
                string tablePath = md5Path + TableManager.Directory;
                FTPManager.MakeDirectory(version + "/");
                FTPManager.MakeDirectory(version + "/updateex/");
                FTPManager.MakeDirectory(version + "/updateex/" + data.Name);
                FTPManager.MakeDirectory(tablePath);

                TableManager.ClearMD5Record();

                // 活动
                List <mw.ActivityConfig> Updateactivitytable = GMTActivityMananger.GetTableActivity().Values.ToList();
                buffer = TableManager.Serialize(Updateactivitytable);
                TableManager.UpdateMD5(buffer, TableManager.Directory + tableNameDictionary[typeof(mw.ActivityConfig)][0]);
                if (!FTPManager.Upload(tablePath + tableNameDictionary[typeof(mw.ActivityConfig)][0], buffer))
                {
                    errorText += FTPManager.GetLastError();
                }

                List <mw.AchieveConfig> Updateachievetable = GMTActivityMananger.GetTableAchieve().Values.ToList();
                buffer = TableManager.Serialize(Updateachievetable);
                TableManager.UpdateMD5(buffer, TableManager.Directory + tableNameDictionary[typeof(mw.AchieveConfig)][0]);
                if (!FTPManager.Upload(tablePath + tableNameDictionary[typeof(mw.AchieveConfig)][0], buffer))
                {
                    errorText += FTPManager.GetLastError();
                }

                List <mw.RewardConfig> Updaterewardtable = GMTActivityMananger.GetTableReward().Values.ToList();
                buffer = TableManager.Serialize(Updaterewardtable);
                TableManager.UpdateMD5(buffer, TableManager.Directory + tableNameDictionary[typeof(mw.RewardConfig)][0]);
                if (!FTPManager.Upload(tablePath + tableNameDictionary[typeof(mw.RewardConfig)][0], buffer))
                {
                    errorText += FTPManager.GetLastError();
                }

                //编辑礼包
                List <mw.GiftConfig> UpdatereGiftTable = new List <mw.GiftConfig>();
                UpdatereGiftTable = GiftManager.addgiftconfig;
                buffer            = TableManager.Serialize(UpdatereGiftTable);
                TableManager.UpdateMD5(buffer, TableManager.Directory + tableNameDictionary[typeof(mw.GiftConfig)][0]);
                if (!FTPManager.Upload(tablePath + tableNameDictionary[typeof(mw.GiftConfig)][0], buffer))
                {
                    errorText += FTPManager.GetLastError();
                }

                // 文本
                buffer = TableManager.Serialize(TextManager.GetConfigList());
                TableManager.UpdateMD5(buffer, TableManager.Directory + tableNameDictionary[typeof(mw.UIDescConfig)][0]);
                if (!FTPManager.Upload(tablePath + tableNameDictionary[typeof(mw.UIDescConfig)][0], buffer))
                {
                    errorText += FTPManager.GetLastError();
                }

                buffer = Encoding.UTF8.GetBytes(TableManager.GetMD5Text());
                if (!FTPManager.Upload(md5Path + "md5.txt", buffer))
                {
                    errorText += FTPManager.GetLastError();
                }
            }

            if (string.IsNullOrEmpty(errorText))
            {
                return(true);
            }

            return(false);
        }