/// <summary>ICHANNEL Reset</summary> void IChannel.Reset() { // Restarts sequences ExpectedSequence = 0; Sequence = 0; // Clean the tables Attempts.Clear(); Contents.Clear(); Cached.Clear(); Acks.Clear(); // Muted Muted = false; }
/// <summary>Process</summary> private void Process() { // Puts running Running = true; // Raise event Raise(EventType.Started); // Link enumerator var linkEnum = ((IEnumerable <Link>)LinksByEndPoint).GetEnumerator(); // Loop while (Running) { // INLET Inlet(Socket); // Processing timeouts if (linkEnum.MoveNext()) { var link = linkEnum.Current; link.Timeout(); // If it is closed if (link.Closed) { LinksByEndPoint.Remove(link); // Statistics Statistics.DecreaseLink(); } // Update traffic link.Statistics.UpdateTraffic(); } else { linkEnum.Reset(); // Update traffic Statistics.UpdateTraffic(); } // Internal call events if (!Settings.UseEvents) { Event(); } } // Disconnect all foreach (Link link in LinksByEndPoint) { link.Shuting(); } // Wait for disconections while (!LinksByEndPoint.IsEmpty) { // Processing timeouts if (linkEnum.MoveNext()) { var link = linkEnum.Current; link.Timeout(); // If it is closed if (link.Closed) { LinksByEndPoint.Remove(link); // Statistics Statistics.DecreaseLink(); } // Update trafic link.Statistics.UpdateTraffic(); } else { linkEnum.Reset(); // Update traffic Statistics.UpdateTraffic(); } // Internal call events if (!Settings.UseEvents) { Event(); } } // Clear links LinksByEndPoint.Clear(); // Raise event Raise(EventType.Stopped); // Internal call events if (!Settings.UseEvents) { Event(); } }