// Function return InterModularDataSender object, through which data should be sent // So actual sender should save this object and use it public static InterModularDataSender RegisterDataSender(string label) { InterModularDataSender sender = new InterModularDataSender(); sender.DataLabel = label; InterModularConnection connection = GetConnection(label); sender.DataArrived = connection.OnDataArrived; connection._senders.Add(sender); return sender; }
// Decrements reference counter on sender, and if this connection is no longer used // by any object, remove it public static void UnregisterDataSender(InterModularDataSender sender) { InterModularConnection connection = GetConnection(sender.DataLabel); if(connection.RemoveSender(sender)) _connections.Remove(connection); }
// Removes sender from connection and returns true if connection is no longer used by any object public bool RemoveSender(InterModularDataSender sender) { _senders.Remove(sender); if (_receivers.Count == 0 && _senders.Count == 0) return true; return false; }