コード例 #1
0
        /// <summary>
        /// 处理拆包
        /// </summary>
        /// <param name="bufs"></param>
        /// <param name="buf"></param>
        private void dealChaiBao(byte[] bufs)
        {
            int length = bufs.Length;

            if (length < 16)
            {
                return;
            }
            long thisPackLength = bufs[0] * 0x1000000 + bufs[1] * 0x10000 + bufs[2] * 0x100 + bufs[3];
            long packLength     = 0;

            if (bufs[4] == 0xff && bufs[5] == 0xfd && bufs[6] == 0xff &&
                bufs[9] == 0xfd && bufs[10] == 0xff && bufs[11] == 0xfd)
            {
                packLength = thisPackLength - 8;
            }
            else
            {
                return;
            }

            int packType = bufs[8];

            long index = bufs.Length - 12;

            byte[] buf = new byte[packLength];
            if (packLength > index)
            {
                Array.Copy(bufs, 12, buf, 0, index);
            }
            else
            {
                Array.Copy(bufs, 12, buf, 0, buf.Length);
            }
            while (packLength > index && !isCloseForm)
            {
                bufs = getDataBt();
                if (bufs.Length + index <= packLength)
                {
                    Array.Copy(bufs, 0, buf, index, bufs.Length);
                    index += bufs.Length;
                }
                else
                {
                    Array.Copy(bufs, 0, buf, index, packLength - index);
                    index = packLength;
                }
            }
            if (packType > 2 && packType < 7) //3,4,5,6处理的事情
            {
                dealTCPClien_loca(packType.ToString(), buf);
                return;
            }
            bool tongbuResult = isSaveDataInFile(buf, packType);

            //数据接收完成后,进行存储,放入到内存中
            if (packType == 0x07)
            {
                //FileModel.getFlModel().getData();  //存储对象
                FileModel.getFlModel().getdata(FileModel.COUNTADD);              //放入到内存中
                byte[] bufD = getCountBtAddHandle(getTCPServerType(0x00, 0x08)); //要接收cacheData.dat文件数据的命令
                sendData(bufD, 0, bufD.Length);
                if (tongbuResult)
                {
                    returnMessage("同步data.dat成功");
                }
                else
                {
                    returnMessage("同步data.dat失敗");
                }
                tongbuTp = 1;
            }
            else
            {
                //   FileModel.getFlModel().getCFData(); //存储对象
                socketclient.Close();               //要的数据都要完了,是时候关闭了
                isOpenTCPClien = false;
                if (tongbuResult)
                {
                    returnMessage("所有文件同步完成");
                }
                else
                {
                    returnMessage("同步cacheData.dat失敗");
                }
                tongbuTp = 2;
            }
            //reDate(buf, packType.ToString(), CommunicationMode.TCPClien_loca);
        }
コード例 #2
0
ファイル: FileModel.cs プロジェクト: 287396159/WQWORK
        /// <summary>
        /// 修改chFlBean的值
        /// </summary>
        /// <param name="cacheFlBean"></param>
        public void changeCacheData(CacheFileBean cacheFlBean)
        {
            if (cacheFlBean == null)
            {
                return;
            }
            if (chFlBean == null || cacheFlBean != null) ///豁出去了,再牛B的逻辑,扛不住主机随机的修改,抗不住客户任意的蹂躏
            {
                string locaIp = FileModel.getFlModel().ChFlBean.ServerIP_TCP;
                if (locaIp == null)
                {
                    locaIp = XWUtils.GetAddressIP();
                }
                int poet = FileModel.getFlModel().ChFlBean.ServerPort_TCP;
                poet = poet == 0 ? 51234 : poet;

                chFlBean = cacheFlBean;

                FileModel.getFlModel().ChFlBean.ServerIP_TCP = locaIp;
                FileModel.getFlModel().ChFlBean.ServerPort_TCP = poet;
                return;
            }

            chFlBean.LocaIP = chFlBean.LocaIP;

            if (chFlBean.LocaPort != cacheFlBean.LocaPort)
            {
                chFlBean.LocaPort = cacheFlBean.LocaPort;
            }
            if (chFlBean.LocaIP_TCP != cacheFlBean.LocaIP_TCP)
            {
                chFlBean.LocaIP_TCP = cacheFlBean.LocaIP_TCP;
            }
            if (chFlBean.LocaPort_TCP != cacheFlBean.LocaPort_TCP)
            {
                chFlBean.LocaPort_TCP = cacheFlBean.LocaPort_TCP;
            }
            if (chFlBean.ServerIP_TCP != cacheFlBean.ServerIP_TCP)
            {
                chFlBean.ServerIP_TCP = cacheFlBean.ServerIP_TCP;
            }
            if (chFlBean.ShowCanKaoDian != cacheFlBean.ShowCanKaoDian)
            {
                chFlBean.ShowCanKaoDian = cacheFlBean.ShowCanKaoDian;
            }
            if (chFlBean.ShowJingJiTag != cacheFlBean.ShowJingJiTag)
            {
                chFlBean.ShowJingJiTag = cacheFlBean.ShowJingJiTag;
            }
            if (chFlBean.ShowBlackTag != cacheFlBean.ShowBlackTag)
            {
                chFlBean.ShowBlackTag = cacheFlBean.ShowBlackTag;
            }
            if (chFlBean.BlackTime != cacheFlBean.BlackTime)
            {
                chFlBean.BlackTime = cacheFlBean.BlackTime;
            }
            if (chFlBean.NoReveTime != cacheFlBean.NoReveTime)
            {
                chFlBean.NoReveTime = cacheFlBean.NoReveTime;
            }
            if (chFlBean.BlackTimeText != cacheFlBean.BlackTimeText)
            {
                chFlBean.BlackTimeText = cacheFlBean.BlackTimeText;
            }
            if (chFlBean.CheckCText != cacheFlBean.CheckCText)
            {
                chFlBean.CheckCText = cacheFlBean.CheckCText;
            }

            List <PeopleBean> cachePeoples = cacheFlBean.Peoples;

            foreach (var peopleItem in cachePeoples) //List<PeopleBean>同步
            {
                var valuePeoples = chFlBean.Peoples.Where(a => a.Id.Equals(peopleItem.Id));
                if (valuePeoples.Count() == 0)
                {
                    chFlBean.Peoples.Add(peopleItem);
                    continue;
                }
                foreach (var valuePeopleItem in valuePeoples)
                {
                    changePeopleBean(peopleItem, valuePeopleItem);
                }
            }

            List <CardBean> cards = cacheFlBean.Cards;

            foreach (var cardItem in cards) //List<CardBean>同步
            {
                var valueCards = chFlBean.Cards.Where(a => a.Id.Equals(cardItem.Id));
                if (valueCards.Count() == 0)
                {
                    chFlBean.Cards.Add(cardItem);
                    continue;
                }
                foreach (var valueCardItem in valueCards)
                {
                    changeCard(cardItem, valueCardItem);
                }
            }

            List <CanKaoDianBean> canKaoDianBean = cacheFlBean.CanKaoDians;

            foreach (var canKaoDianBeanItem in canKaoDianBean) //List<CardBean>同步
            {
                var valueCanKaoDianBeans = chFlBean.CanKaoDians.Where(a => a.Id.Equals(canKaoDianBeanItem.Id));
                if (valueCanKaoDianBeans.Count() == 0)
                {
                    chFlBean.CanKaoDians.Add(canKaoDianBeanItem);
                    continue;
                }
                foreach (var valuecankaoItem in valueCanKaoDianBeans)
                {
                    cchangeCankaodian(valuecankaoItem, canKaoDianBeanItem);
                }
            }

            Dictionary <string, CardBean> cardDicS = cacheFlBean.CardDic;

            foreach (var cardDicSItem in cardDicS) //List<CardBean>同步
            {
                if (chFlBean.CardDic.ContainsKey(cardDicSItem.Key))
                {
                    changeCard(cardDicSItem.Value, chFlBean.CardDic[cardDicSItem.Key]);
                }
                else
                {
                    chFlBean.CardDic.Add(cardDicSItem.Key, cardDicSItem.Value);
                }
            }

            //private List<NODEBean> nodes;  //当前力丽不需要这个数据,只是干放着,没有任何数据
            //private Dictionary<string, CardBean> cardDic;//Dictionary
            //   if ()
        }