示例#1
0
文件: SockTcp.cs 项目: schifflee/bjd5
        //1行受信
        //切断・タイムアウトでnullが返される
        public byte[] LineRecv(int sec, ILife iLife)
        {
            var tout = new util.Timeout(sec);

            while (iLife.IsLife())
            {
                //Ver5.1.6
                if (_sockQueue.Length == 0)
                {
                    Thread.Sleep(100);
                }
                byte[] buf = _sockQueue.DequeueLine();
                //noEncode = false;//テキストである事が分かっている
                Trace(TraceKind.Recv, buf, false);
                if (buf.Length != 0)
                {
                    //Ver5.8.6 Java fix
                    tout.Update(); //タイムアウトの更新
                    return(buf);
                }
                if (SockState != SockState.Connect)
                {
                    return(null);
                }
                if (tout.IsFinish())
                {
                    return(null); //タイムアウト
                }
                Thread.Sleep(1);
            }
            return(null);
        }
示例#2
0
文件: SockTcp.cs 项目: jsakamoto/bjd5
        //受信<br>
        //切断・タイムアウトでnullが返される
        public byte[] Recv(int len, int sec, ILife iLife)
        {
            var tout = new util.Timeout(sec);

            var buffer = new byte[0];
            try{
                if (len <= _sockQueue.Length){
                    // キューから取得する
                    buffer = _sockQueue.Dequeue(len);

                } else{
                    while (iLife.IsLife()){
                        Thread.Sleep(0);
                        if (0 < _sockQueue.Length){
                            //Java fix
                            tout.Update(); //少しでも受信があった場合は、タイムアウトを更新する

                            //size=受信が必要なバイト数
                            int size = len - buffer.Length;

                            //受信に必要なバイト数がバッファにない場合
                            if (size > _sockQueue.Length){
                                size = _sockQueue.Length; //とりあえずバッファサイズ分だけ受信する
                            }
                            byte[] tmp = _sockQueue.Dequeue(size);
                            buffer = Bytes.Create(buffer, tmp);

                            //Java fix Ver5.8.2
                            if (buffer.Length != 0){
                                break;
                            }
                        } else{
                            if (SockState != SockState.Connect){
                                return null;
                            }
                            Thread.Sleep(10);
                        }
                        if (tout.IsFinish()){
                            buffer = _sockQueue.Dequeue(len); //タイムアウト
                            break;
                        }
                    }
                }
            } catch (Exception){
                //ex.printStackTrace();
                return null;
            }
            Trace(TraceKind.Recv, buffer, false);

            return buffer;
        }
示例#3
0
文件: SockTcp.cs 项目: jsakamoto/bjd5
        //1行受信
        //切断・タイムアウトでnullが返される
        public byte[] LineRecv(int sec, ILife iLife)
        {
            var tout = new util.Timeout(sec);

            while (iLife.IsLife()){
                //Ver5.1.6
                if (_sockQueue.Length == 0){
                    Thread.Sleep(100);
                }
                byte[] buf = _sockQueue.DequeueLine();
                //noEncode = false;//テキストである事が分かっている
                Trace(TraceKind.Recv, buf, false);
                if (buf.Length != 0){
                    //Ver5.8.6 Java fix
                    tout.Update(); //タイムアウトの更新
                    return buf;
                }
                if (SockState != SockState.Connect){
                    return null;
                }
                if (tout.IsFinish()){
                    return null; //タイムアウト
                }
                Thread.Sleep(1);
            }
            return null;
        }
示例#4
0
文件: SockTcp.cs 项目: schifflee/bjd5
        //受信<br>
        //切断・タイムアウトでnullが返される
        public byte[] Recv(int len, int sec, ILife iLife)
        {
            var tout = new util.Timeout(sec);

            var buffer = new byte[0];

            try{
                if (len <= _sockQueue.Length)
                {
                    // キューから取得する
                    buffer = _sockQueue.Dequeue(len);
                }
                else
                {
                    while (iLife.IsLife())
                    {
                        Thread.Sleep(0);
                        if (0 < _sockQueue.Length)
                        {
                            //Java fix
                            tout.Update(); //少しでも受信があった場合は、タイムアウトを更新する

                            //size=受信が必要なバイト数
                            int size = len - buffer.Length;

                            //受信に必要なバイト数がバッファにない場合
                            if (size > _sockQueue.Length)
                            {
                                size = _sockQueue.Length; //とりあえずバッファサイズ分だけ受信する
                            }
                            byte[] tmp = _sockQueue.Dequeue(size);
                            buffer = Bytes.Create(buffer, tmp);

                            //Java fix Ver5.8.2
                            if (buffer.Length != 0)
                            {
                                break;
                            }
                        }
                        else
                        {
                            if (SockState != SockState.Connect)
                            {
                                return(null);
                            }
                            Thread.Sleep(10);
                        }
                        if (tout.IsFinish())
                        {
                            buffer = _sockQueue.Dequeue(len); //タイムアウト
                            break;
                        }
                    }
                }
            } catch (Exception) {
                //ex.printStackTrace();
                return(null);
            }
            Trace(TraceKind.Recv, buffer, false);

            return(buffer);
        }