예제 #1
0
        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();
        }
예제 #2
0
        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);
            }
        }