| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.ServiceModel;
 
- using Aitex.Core.RT.Log;
 
- using Aitex.Core.RT.Event;
 
- using Aitex.Core.Util;
 
- using Aitex.Core.WCF.Interface;
 
- using System.Collections.Concurrent;
 
- namespace Aitex.Core.WCF
 
- {
 
-     [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
 
-     public class EventService : IEventService
 
-     {
 
-         ConcurrentDictionary<Guid, IEventServiceCallback> _callbackClientList = new ConcurrentDictionary<Guid, IEventServiceCallback>();
 
-         public event Action<EventItem> OnEvent;
 
-         private int _counter;
 
-         public EventService()
 
-         {
 
-         }
 
-         public void FireEvent(EventItem obj)
 
-         {
 
-             //DeviceTimer _timer = new DeviceTimer();
 
-             //_timer.Start(0);
 
-             //double t1 = 0;
 
-             //double t2 = 0;
 
-             //double t3 = 0;
 
-             
 
-             //t1 = _timer.GetElapseTime();
 
-             Guid[] ids = _callbackClientList.Keys.ToArray();
 
-             for (int i = 0; i < ids.Length; i++)
 
-             {
 
-                 try
 
-                 {
 
-                     //t2 = _timer.GetElapseTime() - t1;
 
-                     _callbackClientList[ids[i]].SendEvent(obj);
 
-                     //t3 = _timer.GetElapseTime() - t2;
 
-                 }
 
-                 catch (Exception ex)
 
-                 {
 
-                     LOG.WriteExeption(string.Format("给客户端{0}发送事件失败,客户端被删除。", ids[i]), ex);
 
-                     IEventServiceCallback service;
 
-                     _callbackClientList.TryRemove(ids[i], out service);
 
-                 }
 
-             }
 
-             if (OnEvent != null)
 
-             {
 
-                 OnEvent(obj);
 
-             }
 
-             //System.Diagnostics.Trace.WriteLine(string.Format("[{0}]  -----   [{1}]     --------- [{2}]",  t1, t2, t3));
 
-         }
 
-         public bool Register(Guid id)
 
-         {
 
-             try
 
-             {
 
-                 if (!_callbackClientList.ContainsKey(id))
 
-                 {
 
-                     //LOG.Info(string.Format("客户端{0}已连接", id.ToString()), true);
 
-                 }
 
-                 _callbackClientList[id] = OperationContext.Current.GetCallbackChannel<IEventServiceCallback>();
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.WriteExeption(ex);
 
-             }
 
-             return true;
 
-         }
 
-         public void UnRegister(Guid id)
 
-         {
 
-             if (!_callbackClientList.ContainsKey(id))
 
-             {
 
-                 //LOG.Info(string.Format("客户端{0}断开连接", id.ToString()), true);
 
-             }
 
-             IEventServiceCallback service;
 
-             _callbackClientList.TryRemove(id, out service);
 
-         }
 
-         public int Heartbeat()
 
-         {
 
-             return _counter++ % 100000;
 
-         }
 
-     }
 
- }
 
 
  |