public void onNeighborUpdate() { Debug.WriteLine("main_window: onNeighborUpdate() stage=" + LuckyMe.testStageString()); numNeighborsLabel.Text = LuckyMeLib.getNumberOfNeighbors() + " neighbors"; ShowWindow(this.Handle, SW_SHOW); this.Refresh(); }
static void Main() { mCallback = new LuckyMeLib.UnmanagedCallback(eventCallback); mSpawnCallback = new LuckyMeLib.SpawnCallback(spawnCallback); mCallTimer = new System.Threading.Timer(new TimerCallback(new myDelegateState(onTimerStatusCheck)), null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); if (LuckyMeLib.setCallback(mCallback) != 1) { System.Diagnostics.Debug.WriteLine("Could not set callback function"); } if (LuckyMeLib.isHaggleRunning()) { mCallTimer.Change(1000, 8000); int res = LuckyMeLib.startLuckyMe(); if (res < 0) { Debug.WriteLine("Could not start LuckyMe"); } Debug.WriteLine("Started LuckyMe..."); } main_window.updateWindowStatus(); Application.Run(main_window); LuckyMeLib.stopLuckyMe(0); }
private void kill_haggle_Click(object sender, EventArgs e) { if (LuckyMeLib.isHaggleRunning()) { int pid = LuckyMeLib.HagglePid(); if (pid != 0) { try { Process haggle = Process.GetProcessById(pid); haggle.Kill(); } catch (Exception) { Debug.WriteLine("No Haggle process with pid " + pid); } Debug.WriteLine("Could not get Haggle process pid"); } } else { Debug.WriteLine("Haggle is not running"); } }
public void onNewDataObject() { Debug.WriteLine("main_window: onNewDataObject stage=" + LuckyMe.testStageString()); numDataObjectsLabel.Text = LuckyMeLib.getNumberOfDOsReceived() + " data objects received"; ShowWindow(this.Handle, SW_SHOW); this.Refresh(); }
/* * Calling shutdown is a more forcefull way of * killing off LuckyMe and Haggle. * Returns: true if the caller should call Application.exit() * or, false if Application.exit() will be called automatically. * */ public static bool shutdown() { bool retval = true; setTestStage(TestStage.SHUTDOWN); if (LuckyMeLib.isHaggleRunning() && LuckyMeLib.isLuckyMeRunning()) { Debug.WriteLine("shutdown: Trying to stop LuckyMe and Haggle"); LuckyMeLib.stopLuckyMe(1); retval = false; } else { if (LuckyMeLib.isLuckyMeRunning()) { Debug.WriteLine("shutdown: Trying to stop LuckyMe"); LuckyMeLib.stopLuckyMe(0); } if (LuckyMeLib.isHaggleRunning()) { Debug.WriteLine("shutdown: Trying to stop Haggle"); LuckyMeLib.stopHaggle(); } } Debug.WriteLine("shutdown: completed..."); return(retval); }
private void quit_luckyme_Click(object sender, EventArgs e) { if (LuckyMeLib.isLuckyMeRunning()) { int res = LuckyMeLib.stopLuckyMe(0); } Application.Exit(); }
public TestControlWindow() { InitializeComponent(); statusMsgLabel.Text = ""; progressBar.Maximum = 60000; if (LuckyMeLib.isHaggleRunning()) { start_haggle_button.Enabled = false; } }
public void updateWindowStatus() { Debug.WriteLine("main_window: updating status"); testStatusLabel.Text = "Test stage: " + LuckyMe.testStageString(); LuckyMeLib.HaggleStatus status = LuckyMeLib.getHaggleStatus(); switch (status) { case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_CRASHED: haggleStatusLabel.Text = "Haggle has crashed"; break; case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_ERROR: haggleStatusLabel.Text = "Haggle status error..."; break; case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_NOT_RUNNING: haggleStatusLabel.Text = "Haggle is not running"; break; case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_RUNNING: haggleStatusLabel.Text = "Haggle is running"; break; } updateLockStatus(); if (LuckyMeLib.isLuckyMeRunning()) { if (LuckyMeLib.isTestRunning()) { luckyMeStatusLabel.Text = "LuckyMe and test is running"; } else { luckyMeStatusLabel.Text = "LuckyMe is running, but not test"; } Debug.WriteLine("main_window: LuckyMe is running"); } else { luckyMeStatusLabel.Text = "LuckyMe is not running"; Debug.WriteLine("main_window: LuckyMe is not running"); } numDataObjectsGenLabel.Text = LuckyMe.getNumDataObjectsGenerated() + " data objects generated"; this.Refresh(); }
private static void killHaggle() { System.Diagnostics.Process clsProcess; clsProcess = System.Diagnostics.Process.GetProcessById(LuckyMeLib.HagglePid()); if (clsProcess != null) { try { //clsProcess.Kill(); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Exception: " + e); } } }
public static void onTimerStatusCheck(object state) { Debug.WriteLine("Timer status check: Checking if Haggle is still running"); LuckyMeLib.HaggleStatus status = LuckyMeLib.getHaggleStatus(); switch (status) { case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_NOT_RUNNING: Debug.WriteLine("status check: Haggle is NOT running"); if (getTestStage() == TestStage.RUNNING) { main_window.BeginInvoke(new myDelegate(main_window.updateWindowStatus)); } stopTest(); break; case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_CRASHED: Debug.WriteLine("status check: Haggle daemon crashed"); main_window.BeginInvoke(new myDelegate(main_window.updateWindowStatus)); stopTest(); DialogResult res = MessageBox.Show("Haggle crashed! Exit LuckyMe?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (res == DialogResult.Yes) { Application.Exit(); } break; case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_ERROR: Debug.WriteLine("status check: Haggle daemon error"); break; case LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_RUNNING: Debug.WriteLine("status check: Haggle daemon running"); break; default: Debug.WriteLine("status check: Unknown status=" + status); break; } }
public void onNeighborUpdate() { // clear list: listView1.Items.Clear(); // fill in list! uint i, j; LuckyMeLib.neighborListLock(); j = LuckyMeLib.getNumberOfNeighbors(); for (i = 0; i < j; i++) { listView1.Items.Add(new ListViewItem(LuckyMeLib.getNeighborName(i))); } LuckyMeLib.neighborListUnlock(); }
public static bool startHaggle() { // Check Haggle status LuckyMeLib.HaggleStatus status = LuckyMeLib.getHaggleStatus(); if (status != LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_RUNNING) { Debug.WriteLine("Deleting old Haggle files"); // Make sure we delete old haggle files. archiveHaggleFiles(false); int res = LuckyMeLib.startHaggle(mSpawnCallback); if (res < 0) { Debug.WriteLine("startTest: startHaggle returned res=" + res); return(false); } status = LuckyMeLib.getHaggleStatus(); if (status != LuckyMeLib.HaggleStatus.HAGGLE_DAEMON_RUNNING) { Debug.WriteLine("startTest: Haggle deamon is not running"); return(false); } // Let Haggle do its thing for a while before we try to connect Thread.Sleep(5000); } // Start status check timer mCallTimer.Change(1000, 8000); updateWindowStatus(); return(true); }
public static void eventCallback(LuckyMeLib.EventType eventType) { bool exitApplication = false; DialogResult res; // Make sure we execute the callbacks in the Window thread switch (eventType) { case LuckyMeLib.EventType.EVENT_TYPE_ERROR: Debug.WriteLine("main_window: got error event"); res = MessageBox.Show("An error occurred in LuckyMe. Exit LuckyMe?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (res == DialogResult.Yes) { exitApplication = true; if (LuckyMeLib.isLuckyMeRunning()) { LuckyMeLib.stopLuckyMe(0); } } break; case LuckyMeLib.EventType.EVENT_TYPE_SHUTDOWN: Debug.WriteLine("callback: Haggle was shutdown"); LuckyMeLib.stopLuckyMe(0); if (LuckyMe.getTestStage() == LuckyMe.TestStage.SHUTDOWN) { Debug.WriteLine("main_window: calling Application.Exit()"); exitApplication = true; } else { Debug.WriteLine("main_window: got shutdown event, but is not in shutdown stage"); res = MessageBox.Show("Haggle was shutdown. Exit LuckyMe?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (res == DialogResult.Yes) { exitApplication = true; } } main_window.BeginInvoke(new myDelegate(main_window.onShutdown)); testcontrol_window.BeginInvoke(new myDelegate(testcontrol_window.onShutdown)); uint n = 0; // Wait for Haggle to shutdown while (LuckyMeLib.isHaggleRunning() && n++ < 120) { Debug.WriteLine("Waiting for Haggle to exit..."); Thread.Sleep(1000); } Debug.WriteLine("Saving log files"); setTestStage(TestStage.SAVING_LOGS); archiveHaggleFiles(true); setTestStage(TestStage.NOT_RUNNING); Debug.WriteLine("Log files saved"); break; case LuckyMeLib.EventType.EVENT_TYPE_NEIGHBOR_UPDATE: Debug.WriteLine("callback neighbor update"); main_window.BeginInvoke(new myDelegate(main_window.onNeighborUpdate)); neighbor_window.BeginInvoke(new myDelegate(neighbor_window.onNeighborUpdate)); break; case LuckyMeLib.EventType.EVENT_TYPE_NEW_DATAOBJECT: Debug.WriteLine("callback new data object"); main_window.BeginInvoke(new myDelegate(main_window.onNewDataObject)); break; case LuckyMeLib.EventType.EVENT_TYPE_DATA_OBJECT_GENERATED: Debug.WriteLine("callback data object generated"); numDataObjectsGenerated++; main_window.BeginInvoke(new myDelegate(main_window.onDataObjectGenerated)); break; case LuckyMeLib.EventType.EVENT_TYPE_STATUS_UPDATE: Debug.WriteLine("callback status update"); main_window.BeginInvoke(new myDelegate(main_window.onStatusUpdate)); break; } if (exitApplication) Application.Exit(); }
public static void eventCallback(LuckyMeLib.EventType eventType) { bool exitApplication = false; DialogResult res; // Make sure we execute the callbacks in the Window thread switch (eventType) { case LuckyMeLib.EventType.EVENT_TYPE_ERROR: Debug.WriteLine("main_window: got error event"); res = MessageBox.Show("An error occurred in LuckyMe. Exit LuckyMe?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (res == DialogResult.Yes) { exitApplication = true; if (LuckyMeLib.isLuckyMeRunning()) { LuckyMeLib.stopLuckyMe(0); } } break; case LuckyMeLib.EventType.EVENT_TYPE_SHUTDOWN: Debug.WriteLine("callback: Haggle was shutdown"); LuckyMeLib.stopLuckyMe(0); if (LuckyMe.getTestStage() == LuckyMe.TestStage.SHUTDOWN) { Debug.WriteLine("main_window: calling Application.Exit()"); exitApplication = true; } else { Debug.WriteLine("main_window: got shutdown event, but is not in shutdown stage"); res = MessageBox.Show("Haggle was shutdown. Exit LuckyMe?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (res == DialogResult.Yes) { exitApplication = true; } } main_window.BeginInvoke(new myDelegate(main_window.onShutdown)); testcontrol_window.BeginInvoke(new myDelegate(testcontrol_window.onShutdown)); uint n = 0; // Wait for Haggle to shutdown while (LuckyMeLib.isHaggleRunning() && n++ < 120) { Debug.WriteLine("Waiting for Haggle to exit..."); Thread.Sleep(1000); } Debug.WriteLine("Saving log files"); setTestStage(TestStage.SAVING_LOGS); archiveHaggleFiles(true); setTestStage(TestStage.NOT_RUNNING); Debug.WriteLine("Log files saved"); break; case LuckyMeLib.EventType.EVENT_TYPE_NEIGHBOR_UPDATE: Debug.WriteLine("callback neighbor update"); main_window.BeginInvoke(new myDelegate(main_window.onNeighborUpdate)); neighbor_window.BeginInvoke(new myDelegate(neighbor_window.onNeighborUpdate)); break; case LuckyMeLib.EventType.EVENT_TYPE_NEW_DATAOBJECT: Debug.WriteLine("callback new data object"); main_window.BeginInvoke(new myDelegate(main_window.onNewDataObject)); break; case LuckyMeLib.EventType.EVENT_TYPE_DATA_OBJECT_GENERATED: Debug.WriteLine("callback data object generated"); numDataObjectsGenerated++; main_window.BeginInvoke(new myDelegate(main_window.onDataObjectGenerated)); break; case LuckyMeLib.EventType.EVENT_TYPE_STATUS_UPDATE: Debug.WriteLine("callback status update"); main_window.BeginInvoke(new myDelegate(main_window.onStatusUpdate)); break; } if (exitApplication) { Application.Exit(); } }
public void updateWindowStatus() { bool haggleIsRunning = false; statusMsgLabel.Text = ""; testStageLabel.Text = "Test stage: " + LuckyMe.testStageString(); if (LuckyMeLib.isHaggleRunning()) { start_haggle_button.Enabled = false; statusMsgLabel.Text = "Haggle is running"; haggleIsRunning = true; } else { start_haggle_button.Enabled = true; } switch (LuckyMe.getTestStage()) { case LuckyMe.TestStage.NOT_RUNNING: start_button.Text = "Start test"; start_button.Enabled = true; stop_button.Text = "Stop test"; stop_button.Enabled = false; shutdown_button.Enabled = true; menuBack.Text = "Back"; updateStartupProgressBar(-1); progressBar.Visible = false; break; case LuckyMe.TestStage.STARTING: start_button.Text = "Please wait..."; start_button.Enabled = false; statusMsgLabel.Text = "Starting test, please wait..."; stop_button.Text = "Stop test"; stop_button.Enabled = false; shutdown_button.Enabled = false; start_haggle_button.Enabled = false; menuBack.Text = ""; if (!haggleIsRunning) { progressBar.Visible = true; } break; case LuckyMe.TestStage.RUNNING: start_button.Text = "Start test"; start_button.Enabled = false; stop_button.Text = "Stop test"; stop_button.Enabled = true; shutdown_button.Enabled = true; menuBack.Text = "Back"; updateStartupProgressBar(-1); progressBar.Visible = false; start_haggle_button.Enabled = false; break; case LuckyMe.TestStage.STOPPING: statusMsgLabel.Text = "Stopping test, please wait..."; start_button.Text = "Start test"; start_button.Enabled = false; stop_button.Enabled = false; stop_button.Text = "Please wait..."; shutdown_button.Enabled = false; menuBack.Text = ""; updateStartupProgressBar(-1); progressBar.Visible = false; start_haggle_button.Enabled = false; break; case LuckyMe.TestStage.SAVING_LOGS: statusMsgLabel.Text = "Saving log files, please wait..."; start_button.Enabled = false; stop_button.Enabled = false; stop_button.Text = "Please wait..."; shutdown_button.Enabled = false; start_haggle_button.Enabled = false; menuBack.Text = ""; break; case LuckyMe.TestStage.SHUTDOWN: progressBar.Visible = false; statusMsgLabel.Text = "Shutting down..."; start_haggle_button.Enabled = false; break; } this.Refresh(); }
/* * This function can be called for two reasons: * 1) Normal operation: save the data base and move the old files aside. * 2) Abort test: delete all data. * * 2) is only called in response to "abort test". This is necessary if * the user accidentally started haggle before starting luckyGUI, or * something. */ private static bool archiveHaggleFiles(bool saveFiles) { if (LuckyMeLib.isTestRunning()) { Debug.WriteLine("archiveHaggleFiles(): Test is still running..."); return(false); } int i; // 2) store haggle folder on SD card: // FIXME: "\Application Data\" should be "%APPDATA%" string sourcedir = "\\Carte de Stockage\\Haggle"; string source2dir = "\\Application Data\\Haggle"; // FIXME: "\Storage Card\" should probably be something like "%STORAGECARD%" string archivedirbase = "\\Carte de Stockage\\Haggle-Backup"; if (System.IO.Directory.Exists(source2dir)) { string[] file = System.IO.Directory.GetFiles(source2dir); for (i = 0; i < file.Length; i++) { try { if (saveFiles && System.IO.Directory.Exists(sourcedir)) { string dstfile = sourcedir + "\\" + System.IO.Path.GetFileName(file[i]); Debug.WriteLine("Copy: " + file[i] + " to " + dstfile); System.IO.File.Copy(file[i], dstfile, true); } // Delete all files that are not libhaggle.txt (because it's open) and // startup.do, because we want it to stay put. if (!(System.IO.Path.GetFileName(file[i]).Equals("libhaggle.txt") || System.IO.Path.GetFileName(file[i]).Equals("startup.do") || System.IO.Path.GetFileName(file[i]).Equals("config.xml"))) { Debug.WriteLine("Delete: " + file[i]); System.IO.File.Delete(file[i]); } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Error: " + e); return(false); } } } string archivedir; i = 0; do { archivedir = archivedirbase + "-" + i; i++; } while (System.IO.Directory.Exists(archivedir)); try { if (saveFiles) { if (System.IO.Directory.Exists(sourcedir)) { Debug.WriteLine("Move: " + sourcedir + " to " + archivedir); System.IO.Directory.Move(sourcedir, archivedir); } } else { if (System.IO.Directory.Exists(source2dir)) { string[] file = System.IO.Directory.GetFiles(source2dir); for (i = 0; i < file.Length; i++) { if (!(System.IO.Path.GetFileName(file[i]).Equals("libhaggle.txt") || System.IO.Path.GetFileName(file[i]).Equals("startup.do") || System.IO.Path.GetFileName(file[i]).Equals("config.xml"))) { Debug.WriteLine("Delete: " + file[i]); System.IO.File.Delete(file[i]); } } } if (System.IO.Directory.Exists(sourcedir)) { string[] file = System.IO.Directory.GetFiles(sourcedir); for (i = 0; i < file.Length; i++) { Debug.WriteLine("Delete: " + file[i]); System.IO.File.Delete(file[i]); } } } } catch (Exception) { System.Diagnostics.Debug.WriteLine("Could not move " + sourcedir); } return(true); }
public static bool stopTest() { bool retval = true; // be optimistic :) if (testStage != TestStage.RUNNING) { Debug.WriteLine("Cannot stop test since test stage=" + testStageString()); return(false); } mCallTimer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); setTestStage(TestStage.STOPPING); if (LuckyMeLib.isLuckyMeRunning()) { if (LuckyMeLib.isHaggleRunning()) { int res = LuckyMeLib.stopLuckyMe(1); Debug.WriteLine("stopLuckyMe() returned " + res); if (res < 0) { Debug.WriteLine("stopTest(): stopLuckyMe failed"); if (LuckyMeLib.isTestRunning()) { setTestStage(TestStage.RUNNING); } else { // Set not running although test stop failed setTestStage(TestStage.NOT_RUNNING); return(true); } return(false); } setTestStage(TestStage.STOPPING); } else { Debug.WriteLine("stopTest(): Haggle was not running"); int res = LuckyMeLib.stopLuckyMe(0); // Haggle was not running so we cannot expect a shutdown callback // -> set NOT_RUNNING immediately setTestStage(TestStage.NOT_RUNNING); } } else { if (LuckyMeLib.isHaggleRunning()) { int res = LuckyMeLib.stopHaggle(); if (res == 1) { Debug.WriteLine("stopTest(): Haggle stopped"); } else if (res == -1) { Debug.WriteLine("stopTest(): Could not stop Haggle, no Haggle handle"); } else { Debug.WriteLine("stopTest(): Could not stop Haggle, not running"); } } setTestStage(TestStage.NOT_RUNNING); } return(retval); }
public static bool startTest() { if (testStage != TestStage.NOT_RUNNING) { return(false); } // Reset counters numDataObjectsGenerated = 0; setTestStage(TestStage.STARTING); if (!startHaggle()) { setTestStage(TestStage.NOT_RUNNING); return(false); } // Start LuckyMe thread if (!LuckyMeLib.isLuckyMeRunning()) { int res = LuckyMeLib.startLuckyMe(); if (res < 0) { Debug.WriteLine("Error: Could not start LuckyMe!"); setTestStage(TestStage.NOT_RUNNING); return(false); } // Check again that LuckyMe and the Haggle event loop is running if (!LuckyMeLib.isLuckyMeRunning()) { Debug.WriteLine("Error: LuckyMe not running after start!"); setTestStage(TestStage.NOT_RUNNING); return(false); } } else { Debug.WriteLine("LuckyMe already running"); } Thread.Sleep(2000); if (!LuckyMeLib.isTestRunning()) { Debug.WriteLine("Starting LuckyMe test loop"); int res = LuckyMeLib.startTest(); if (res < 0) { Debug.WriteLine("Error: Could not start LuckyMe test loop!"); setTestStage(TestStage.NOT_RUNNING); LuckyMeLib.stopHaggle(); return(false); } } else { Debug.WriteLine("LuckyMe test already running"); } setTestStage(TestStage.RUNNING); return(true); }