public void RegisterSP(SPServerHandler handler) { this.spHandler = handler; if (deliverTimer != null) { deliverTimer.Stop(); } deliverTimer = new System.Timers.Timer(1000); deliverTimer.Elapsed += (sender, e) => { deliverLocker.EnterWriteLock(); if (deliverQueue.Count > 0) { var deliver = deliverQueue.Dequeue(); var client = handler.GetSPClient(deliver.SPNumber); //若SP客户端在线则转发,不在线则丢弃等待下次上线再转发 if (client != null) { client.Socket.Send(deliver.GetBytes()); //映射seq spHandler.MapSequeue(deliver.SequenceNumberString, deliver.SequenceNumberString); } } deliverLocker.ExitWriteLock(); }; deliverTimer.Start(); }
public void UnRegisterSP() { if (spHandler != null) { try { deliverTimer.Stop(); deliverQueue.Clear(); spHandler = null; } catch { throw; } } }