// таймер private void MainTimer_Tick(object sender, EventArgs e) { // если текущее время >= времени события DateTime DT_Now = DateTime.Now; if (DT_Now >= NextSignaltime) { // остановить таймер MainTimer.Stop(); // получить структуру события ReadWriteFile RWF = new ReadWriteFile(WorkDir + "\\" + EventListFile, vers); EventStruct ES = RWF.GetEvent(NextEventIndex); SignalText = ES.Caption; SignalType = ES.IsEarly; EventDay = ES.Date; NeedSignalize = true; // сигализировать //Signalize(ES.Caption, ES.IsEarly, ES.Date); needBell = true; Signalize(); // изменить статус события ES.Informed = true; RWF.EditEvent(NextEventIndex, ES); // перезапустить таймер ReloadTimer(); } }
/// <summary> /// возвращает событие с указанным номером /// </summary> /// <param name="indx">номер события</param> /// <returns>null - если такого индекса нет</returns> public EventStruct GetEvent(int indx) { EventStruct ES = new EventStruct(); try { ES = EventsList[indx]; } catch { ES.Date = DateTime.Today; ES.Caption = "Событие не найдено!!!"; ES.BeforeInform = DateTime.Today; ES.CapLength = (byte)ES.Caption.Length; ES.Informed = false; ES.NeedInform = false; ES.IsEarly = false; } return(ES); }
// определить время следующего сигнала private bool DetectNextSignal() { ReadWriteFile RWF = new ReadWriteFile(WorkDir + "\\" + EventListFile, vers); // индекс ближайшего события int indx = RWF.NextEvent(); if (indx >= 0) { NextEventIndex = indx; EventStruct ES = RWF.GetEvent(indx); NextSignaltime = ES.BeforeInform; //label10.Text = ES.BeforeInform.ToShortDateString() + " " + ES.BeforeInform.ToShortTimeString() + "\r\n" + ES.Caption; IconText = NextSignaltime.ToShortDateString() + " " + NextSignaltime.ToShortTimeString() + "\r\n" + ES.Caption; if (IconText.Length > 63) { IconText = IconText.Substring(0, 63); } notifyIcon1.Text = IconText; return(true); } return(false); }
/// <summary> /// Изменить /// </summary> /// <param name="fName"></param> /// <param name="vr"></param> /// <param name="indx">индекс изменяемого события</param> public EditAddEvent(string fName, byte[] vr, int indx, MainForm fr) { InitializeComponent(); FileName = fName; Array.Copy(vr, vers, 4); IndexOfEvent = indx; ReadWriteFile RWF = new ReadWriteFile(FileName, vers); //EventStruct ES = RWF.GetEvent(75); EventStruct ES = RWF.GetEvent(indx); DT = ES.Date; Caption = ES.Caption; Event = !ES.IsEarly; signal = ES.NeedInform; TimeSpan ts = DT.Date - ES.BeforeInform.Date; BeforeDay = ts.Days; ts = ES.BeforeInform.TimeOfDay; time = new DateTime(ts.Ticks); mfr = fr; }
/// <summary> /// изменить событие /// </summary> /// <param name="indx"></param> /// <param name="ES"></param> public void EditEvent(int indx, EventStruct ES) { EventsList[indx] = ES; WriteFile(); }
// добавить событие public void AddEvent(EventStruct ES) { EventsList.Add(ES); WriteFile(); }
// ========== PRIVATE ========= // прочитать файл private void ReadFile() { //string fn = WorkDirectory + "\\eventlist.dat"; //if (File.Exists(fn) == false) if (File.Exists(fileName) == false) { return; } FileStream FS; try { FS = new FileStream(fileName, FileMode.Open, FileAccess.Read); } catch { return; } // тип // версия // кол-во FS.Seek(8, SeekOrigin.Begin); byte[] buf = new byte[4]; FS.Read(buf, 0, 4); int count = BitConverter.ToInt32(buf, 0); long offset; EventStruct ES; for (int i = 0; i < count; i++) { ES = new EventStruct(); // смещение очердного события FS.Seek(12 + i * 4, SeekOrigin.Begin); FS.Read(buf, 0, 4); offset = Convert.ToInt64(BitConverter.ToInt32(buf, 0)); // передвигаемся на начало i-й структуры FS.Seek(offset, SeekOrigin.Begin); // дата buf = new byte[8]; FS.Read(buf, 0, 8); long tickcount = BitConverter.ToInt64(buf, 0); ES.Date = new DateTime(tickcount); // длинна заголовка byte B = (byte)FS.ReadByte(); ES.CapLength = B; // кол-во символов // заголовок buf = new byte[B * 2]; // т.к юникод 1 симв = 2 байт FS.Read(buf, 0, B * 2);; string S = Encoding.Unicode.GetString(buf); ES.Caption = S; // необходимость оповещения B = (byte)FS.ReadByte(); ES.NeedInform = Convert.ToBoolean(B); // время сигнала buf = new byte[8]; FS.Read(buf, 0, 8); tickcount = BitConverter.ToInt64(buf, 0); ES.BeforeInform = new DateTime(tickcount); // был ли сигнал B = (byte)FS.ReadByte(); ES.Informed = Convert.ToBoolean(B); // типо события B = (byte)FS.ReadByte(); ES.IsEarly = Convert.ToBoolean(B); // добавить событие в список EventsList.Add(ES); } FS.Close(); }