void BuroStoreService_WindowsEventLog(object sender, BuroStoreService.BuroStoreServiceEventArgs e) { if (e.Type == BuroStoreServiceEventArgs.EventType.Error || e.Type == BuroStoreServiceEventArgs.EventType.Warning) { System.Diagnostics.EventLog log = new System.Diagnostics.EventLog("Бюрократ WMS 2", ".", "Бюрократ WMS 2"); if (e.Type == BuroStoreServiceEventArgs.EventType.Error) { log.WriteEntry(e.Message, System.Diagnostics.EventLogEntryType.Error); } else if (e.Type == BuroStoreServiceEventArgs.EventType.Warning) { log.WriteEntry(e.Message, System.Diagnostics.EventLogEntryType.Warning); } log.Close(); log.Dispose(); } }
/// <summary> /// обработчик события, раздает событие всем подключенным сессиям telnet /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void BuroStoreService_TelnetLogging(object sender, BuroStoreService.BuroStoreServiceEventArgs e) { //окна windows показывают в кодировке 866 //http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 byte [] buffer = this._encoding866.GetBytes ( (e.Type != BuroStoreServiceEventArgs.EventType.Info ? e.Type.ToString() : "" ) + e.Message ); //сокеты telnet при обращении к которым возникли проблемы //нельзя удалять элементы из списка в процессе прохода по нему в цикле foreach //поэтому я сперва аккумулирую проблемные сокеты в этом списке List<Socket> brokenSockets = new List<Socket>(); //почему 3000? А почему бы и нет? if (_readyToUseTelnetClientsList.WaitOne(3000)) { //публикация в telnet и еще что-нибудь foreach (Socket s in this._telnetClients) { try { s.Send(buffer); s.Send(this._encoding866.GetBytes("\r\n")); } catch { brokenSockets.Add(s); } } foreach (Socket s in brokenSockets) { this._telnetClients.Remove(s); } _readyToUseTelnetClientsList.Set(); } }