Exemple #1
0
        /// <summary>
        /// 获取一条可用数据,返回值标记是否有数据
        /// </summary>
        /// <param name="tmpSocketData"></param>
        /// <returns></returns>
        public bool GetData(out sSocketData tmpSocketData)
        {
            tmpSocketData = new sSocketData();

            if (buffLength <= 0)
            {
                UpdateDataLength();
            }

            if (buffLength > 0 && curBuffPosition >= buffLength)
            {
                tmpSocketData.buffLength = buffLength;
                tmpSocketData.dataLength = dataLength;
                tmpSocketData.protocal   = protocal;
                tmpSocketData.data       = new byte[dataLength];
                Array.Copy(buff, Constants.HEAD_LEN, tmpSocketData.data, 0, dataLength);
                curBuffPosition -= buffLength;
                byte[] tmpBuff = new byte[curBuffPosition < minBuffLen ? minBuffLen : curBuffPosition];
                Array.Copy(buff, buffLength, tmpBuff, 0, curBuffPosition);
                buff = tmpBuff;


                buffLength = 0;
                dataLength = 0;
                protocal   = 0;
                return(true);
            }
            return(false);
        }
        /// <summary>
        /// 数据转网络结构
        /// </summary>
        /// <param name="_protocalType"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        private sSocketData BytesToSocketData(int protocol, byte[] data)
        {
            sSocketData tmpSocketData = new sSocketData();

            tmpSocketData.buffLength = Constants.HEAD_LEN + data.Length;
            tmpSocketData.protocal   = protocol;
            tmpSocketData.dataLength = data.Length;
            tmpSocketData.data       = data;
            return(tmpSocketData);
        }
        /// <summary>
        /// 网络结构转数据
        /// </summary>
        /// <param name="tmpSocketData"></param>
        /// <returns></returns>
        private byte[] SocketDataToBytes(sSocketData tmpSocketData)
        {
            byte[] tmpBuff       = new byte[tmpSocketData.buffLength];
            byte[] tmpBuffLength = BitConverter.GetBytes(tmpSocketData.buffLength);
            byte[] tmpDataLenght = BitConverter.GetBytes(tmpSocketData.protocal);

            Array.Copy(tmpBuffLength, 0, tmpBuff, 0, Constants.HEAD_DATA_LEN);                        //缓存总长度
            Array.Copy(tmpDataLenght, 0, tmpBuff, Constants.HEAD_DATA_LEN, Constants.HEAD_TYPE_LEN);  //协议类型
            Array.Copy(tmpSocketData.data, 0, tmpBuff, Constants.HEAD_LEN, tmpSocketData.dataLength); //协议数据

            return(tmpBuff);
        }