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(); } } }
protected void OnIPConnectionClosed(int id) { lock (this.ipConnectionSyncRoot) { ATConnectionState connectionState = this.ipConnectionState[id]; if (connectionState.ipConnectionOpened) { connectionState.ipConnectionOpened = false; connectionState.ipConnectionDataReady.Set(); } } }
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); } }
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(); } } } }