public EvnCenter(SessCtl sessctl) { this.sesscer = sessctl; sessctl.sess_parse += new SessCtl.SessParseDelegate(sessmgr_sess_parse); sessctl.sess_delete += new SessCtl.SessDeleteDelegate(sessmgr_sess_delete); sessctl.MakeListen(new IPEndPoint(IPAddress.Parse("0.0.0.0"), 2000)); sessctl.MakeListen(new IPEndPoint(IPAddress.Parse("0.0.0.0"), 3000)); sessctl.MakeListen(new IPEndPoint(IPAddress.Parse("0.0.0.0"), 3002)); sessctl.MakeListen(new IPEndPoint(IPAddress.Parse("0.0.0.0"), 3006)); sessctl.MakeListen(new IPEndPoint(IPAddress.Parse("0.0.0.0"), 3008)); }
public CoreBase() { // init timectl timectl = new TimeOutCtl(); // init sessctl sessctl = new SessCtl(); sessctl.sess_parse += new SessCtl.SessDelegate(SessParse); sessctl.sess_create += new SessCtl.SessDelegate(SessCreate); sessctl.sess_delete += new SessCtl.SessDelegate(SessDelete); // init dispatcher dispatcher = new DispatcherBase(); }
public Dispatcher(SessCtl sessctl) : base() { pack_queue = new Queue<object[]>(); this.sessctl = sessctl; Thread thread = new Thread(() => { while (true) { try { object[] pack = null; lock (pack_queue) { if (pack_queue.Count != 0) // Any() is not thread safe pack = pack_queue.Dequeue(); } if (pack == null) { Thread.Sleep(1000); continue; } SockRequest request = pack[0] as SockRequest; SockResponse response = pack[1] as SockResponse; base.Handle(request, ref response); if (response.data != null && response.data.Length != 0) { sessctl.BeginInvoke(new Action(() => { SockSess result = sessctl.FindSession(SockType.accept, null, request.rep); if (result != null) sessctl.SendSession(result, response.data); })); } } catch (Exception ex) { log4net.ILog log = log4net.LogManager.GetLogger(typeof(Dispatcher)); log.Warn("Exception of handling request to modules.", ex); } } }); thread.IsBackground = true; thread.Start(); }
private void init() { // 初始化变量 sessctl = new SessCtl(); sessctl.sess_parse += new SessCtl.SessParseDelegate(sessmgr_sess_parse); sessctl.sess_delete += new SessCtl.SessDeleteDelegate(sessmgr_sess_delete); moduleTable = new ObservableCollection<ModuleUnit>(); clientTable = new ObservableCollection<ClientUnit>(); DataContext = new { ModuleTable = moduleTable, ClientTable = clientTable }; ep = new IPEndPoint(IPAddress.Parse(ConfigurationManager.AppSettings["ip"]), int.Parse(ConfigurationManager.AppSettings["port"])); tick = DateTime.Now; // 加载 DataHandles 文件夹下的所有模块 string modulePath = System.AppDomain.CurrentDomain.BaseDirectory + @"\Modules"; if (Directory.Exists(modulePath)) { string[] files = Directory.GetFiles(modulePath); // Load dll files one by one foreach (var item in files) { string str = item.Substring(item.LastIndexOf("\\") + 1); if (str.Contains("Module") && str.ToLower().EndsWith(".dll")) AtModuleLoad(item); } } // 尝试连接中心站 foreach (var item in moduleTable) item.State = SockState.Opening; // 启动socket线程 Thread thread = new Thread(() => { while (true) { perform(); sessctl.Perform(1000); } }); thread.IsBackground = true; thread.Start(); }