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 Commit(MReport mReport) { var client = spHandler.GetSPClient(mReport.SPNumber); //若SP客户端在线则转发,不在线则丢弃等待下次上线再转发 if (client != null) { var r = new Report { SubmitSequenceNumber = mReport.TargetSubmitSequenceNumber, ReportType = (uint)mReport.ReportType, State = (uint)mReport.State, ErrorCode = (uint)mReport.ErrorCode, UserNumber = mReport.UserNumber }; client.Socket.Send(r.GetBytes()); //映射序列号 spHandler.MapSequeue(r.SequenceNumberString, mReport.SubmitSequenceNumber); } }