public void ServerTimerStart(ServerUnit server) { server.Timer = new System.Timers.Timer(server.TimerInterval * 1000); // limbda 不会锁住DataUI.ServerTable server.Timer.Elapsed += new System.Timers.ElapsedEventHandler((s, ea) => sessctl.BeginInvoke(new Action(() => { // define variables IPEndPoint ep = new IPEndPoint(IPAddress.Parse(server.IpAddress), server.Port); SockSess result = null; // find and send msg to session result = sessctl.FindSession(SockType.listen, ep, null); if (result != null) sessctl.SendSession(result, Coding.GetBytes(server.TimerCommand)); })) ); server.Timer.Start(); server.TimerState = ServerUnit.TimerStateStarted; }
public void ServerTimerStop(ServerUnit server) { server.Timer.Stop(); server.Timer.Close(); server.TimerState = ServerUnit.TimerStateStoped; }
public void Config() { if (File.Exists(EnvConst.CONF_PATH) == false) { System.Windows.MessageBox.Show(EnvConst.CONF_NAME + ": can't find it."); Thread.CurrentThread.Abort(); } try { XmlDocument xdoc = new XmlDocument(); xdoc.Load(EnvConst.CONF_PATH); // Encoding Config XmlNode node = xdoc.SelectSingleNode(EnvConst.CONF_ENCODING); Coding = Encoding.GetEncoding(node.InnerText); // Server Config foreach (XmlNode item in xdoc.SelectNodes(EnvConst.CONF_SERVER)) { ServerUnit server = new ServerUnit(); server.ID = item.Attributes["id"].Value; server.Name = item.Attributes["name"].Value; server.Target = (ServerTarget)Enum.Parse(typeof(ServerTarget), item.Attributes["target"].Value); server.Protocol = item.Attributes["protocol"].Value; server.IpAddress = item.Attributes["ipaddress"].Value; server.Port = int.Parse(item.Attributes["port"].Value); server.AutoRun = bool.Parse(item.Attributes["autorun"].Value); server.CanStop = bool.Parse(item.Attributes["canstop"].Value); server.ListenState = ServerUnit.ListenStateStoped; server.TimerState = server.Target == ServerTarget.center ? ServerUnit.TimerStateDisable : ServerUnit.TimerStateStoped; server.TimerInterval = 0; server.TimerCommand = ""; server.Timer = null; DataUI.ServerTable.Add(server); } } catch (Exception ex) { log4net.ILog log = log4net.LogManager.GetLogger(typeof(Core)); log.Error("Exception of reading configure file.", ex); System.Windows.MessageBox.Show(EnvConst.CONF_NAME + ": syntax error."); } // autorun foreach (var item in DataUI.ServerTable) { if (item.AutoRun) { if (item.Protocol == "tcp") { SockSess result = sessctl.MakeListen(new IPEndPoint(IPAddress.Parse(item.IpAddress), item.Port)); if (result != null) item.ListenState = ServerUnit.ListenStateStarted; } else if (item.Protocol == "udp") { } } } }