/// <summary> /// Move the specified <see cref="P2PSession"/> to the new <see cref="P2PBridge"/> specified. /// </summary> /// <param name="session"></param> /// <param name="newBridge"></param> public virtual void MigrateQueue(P2PSession session, P2PBridge newBridge) { Trace.WriteLineIf(Settings.TraceSwitch.TraceVerbose, String.Format("P2PBridge {0} migrating session {1} queue to new bridge {2}", this.ToString(), session.SessionId, (newBridge != null) ? newBridge.ToString() : "null"), GetType().Name); P2PSendQueue newQueue = new P2PSendQueue(); lock (sendingQueues) { if (sendingQueues.ContainsKey(session)) { if (newBridge != null) { lock (sendingQueues[session]) { foreach (P2PSendItem item in sendingQueues[session]) { newQueue.Enqueue(item); } } } sendingQueues.Remove(session); } } lock (sendQueues) { if (sendQueues.ContainsKey(session)) { if (newBridge != null) { while (sendQueues[session].Count > 0) { newQueue.Enqueue(sendQueues[session].Dequeue()); } } sendQueues.Remove(session); } } lock (stoppedSessions) { if (stoppedSessions.Contains(session)) { stoppedSessions.Remove(session); } } if (newBridge != null) { newBridge.AddQueue(session, newQueue); } }
/// <summary> /// Move the specified <see cref="P2PSession"/> to the new <see cref="P2PBridge"/> specified. /// </summary> /// <param name="session"></param> /// <param name="newBridge"></param> public virtual void MigrateQueue(P2PSession session, P2PBridge newBridge) { Trace.WriteLineIf(Settings.TraceSwitch.TraceVerbose, String.Format("P2PBridge {0} migrating session {1} queue to new bridge {2}", this.ToString(), session.SessionId, (newBridge != null) ? newBridge.ToString() : "null"), GetType().Name); P2PSendQueue newQueue = new P2PSendQueue(); lock (sendingQueues) { if (sendingQueues.ContainsKey(session)) { if (newBridge != null) { lock (sendingQueues[session]) { foreach (P2PSendItem item in sendingQueues[session]) newQueue.Enqueue(item); } } sendingQueues.Remove(session); } } lock (sendQueues) { if (sendQueues.ContainsKey(session)) { if (newBridge != null) { while (sendQueues[session].Count > 0) newQueue.Enqueue(sendQueues[session].Dequeue()); } sendQueues.Remove(session); } } lock (stoppedSessions) { if (stoppedSessions.Contains(session)) { stoppedSessions.Remove(session); } } if (newBridge != null) newBridge.AddQueue(session, newQueue); }