Beispiel #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();
        }
Beispiel #2
0
 public void UnRegisterSP()
 {
     if (spHandler != null)
     {
         try
         {
             deliverTimer.Stop();
             deliverQueue.Clear();
             spHandler = null;
         }
         catch
         {
             throw;
         }
     }
 }