public bool isSubscribed(Subscriber s, int channelNumber) { using (ReadLocker wl = new ReadLocker(ref mSubscribersLock)) { if (channelNumber > mSubscribers.Count) return false; return mSubscribers[channelNumber - 1].Contains(s); } }
public void onDataCame(int channelNumber, byte[] data) { List<IDataReceiver> receivers; using (ReadLocker wl = new ReadLocker(ref mReceiversLock)) { receivers = mReceivers.ConvertAll<IDataReceiver>(p => p); } foreach (IDataReceiver receiver in receivers) { receiver.onDataCame(channelNumber, data); } }
public List<int> channels(Subscriber s) { List<int> ret = new List<int>(); using (ReadLocker rl = new ReadLocker(ref mSubscribersLock)) { for (int i = 0; i < mSubscribers.Count; ++i) { if (mSubscribers[i].Contains(s)) { ret.Add(i + 1); } } } return ret; }
public void onDataCame(int channelNumber, byte[] data) { ByteArrayDataPackage package = new ByteArrayDataPackage(channelNumber, data); LatencyCounter.receivedPackage(package.id); Subscriber[] mReveiverSubscribers; using (ReadLocker rl = new ReadLocker(ref mSubscribersLock)) { mReveiverSubscribers = new Subscriber[mSubscribers[package.channelNumber - 1].Count]; mSubscribers[package.channelNumber - 1].CopyTo(mReveiverSubscribers); } foreach (Subscriber s in mReveiverSubscribers) { s.onDataCame(package); } LatencyCounter.gavePackage(package.id); }