예제 #1
0
파일: ATModem.cs 프로젝트: ysoyipek/ATModem
        protected void SetDataFrame(int id, ATFrame frame)
        {
            ATConnectionState connectionState = this.ipConnectionState[id];

            lock (this.ipConnectionSyncRoot)
            {
                if (this.ipConnectionDataCount < this.ipConnectionDataLength)
                {
                    ATConnectionState previousConnectionState = this.ipConnectionState[this.ipConnectionId];

                    //La connessione con ipConnectionId ha perso dei dati in ricezione.
                    previousConnectionState.ipConnectionDataDiscarded = true;
                    previousConnectionState.ipConnectionDataReady.Set();
                }

                if (connectionState.ipConnectionOpened && !connectionState.ipConnectionDataDiscarded)
                {
                    this.ipConnectionId         = id;
                    this.ipConnectionDataCount  = 0;
                    this.ipConnectionDataLength = frame.DataStream.Length;
                    this.ipConnectionDataStream = frame.DataStream;

                    connectionState.ipConnectionDataReady.Set();
                }
            }
        }
예제 #2
0
파일: ATModem.cs 프로젝트: ysoyipek/ATModem
        protected void OnIPConnectionClosed(int id)
        {
            lock (this.ipConnectionSyncRoot)
            {
                ATConnectionState connectionState = this.ipConnectionState[id];

                if (connectionState.ipConnectionOpened)
                {
                    connectionState.ipConnectionOpened = false;
                    connectionState.ipConnectionDataReady.Set();
                }
            }
        }
예제 #3
0
파일: ATModem.cs 프로젝트: ysoyipek/ATModem
        public virtual int ReceiveData(int id, byte[] buffer, int index, int count, int timeout)
        {
            ATConnectionState connectionState = this.ipConnectionState[id];

            if (!connectionState.ipConnectionDataReady.WaitOne(timeout, true))
            {
                throw new ATModemException(ATModemError.Timeout);
            }

            lock (this.ipConnectionSyncRoot)
            {
                if (!connectionState.ipConnectionOpened || connectionState.ipConnectionDataDiscarded)
                {
                    connectionState.ipConnectionDataReady.Set();

                    return(0);
                }

                count = ipConnectionDataStream.Read(buffer, index, count);

                //Verifico se sono andati persi dei dati della frame.
                if (count == 0 && this.ipConnectionDataCount < this.ipConnectionDataLength)
                {
                    connectionState.ipConnectionDataDiscarded = true;
                }

                this.ipConnectionDataCount += count;

                //Verifico se la lettura dei dati della frame è incompleta.
                if (this.ipConnectionDataCount < this.ipConnectionDataLength)
                {
                    connectionState.ipConnectionDataReady.Set();
                }

                return(count);
            }
        }
예제 #4
0
파일: ATModem.cs 프로젝트: ysoyipek/ATModem
        protected void OnIPConnectionOpened(int id, bool remote)
        {
            lock (this.ipConnectionSyncRoot)
            {
                ATConnectionState connectionState = this.ipConnectionState[id];

                if (!connectionState.ipConnectionOpened)
                {
                    connectionState.ipConnectionOpened        = true;
                    connectionState.ipConnectionPending       = true;
                    connectionState.ipConnectionDataDiscarded = false;
                    connectionState.ipConnectionMode          = ATConnectionMode.Client;
                    connectionState.ipConnectionDataReady.Reset();

                    if (remote)
                    {
                        connectionState.ipConnectionMode = ATConnectionMode.Server;

                        this.ipConnectionServerCount++;
                        this.ipConnectionServerReady.Set();
                    }
                }
            }
        }