public MainWindow() { InitializeComponent(); skypeSetUpDone = false; contactInfoChangedSetUpDone = false; //Set up serial communication serial = new serialCom(); serial.DataReceived += ThreadDataReceived; serial.Disconnected += arduinoDisconnected; lastColorSend = ""; //Set up app presence chooser for (int i = 0; i < AvailailityTable.GetLength(0); i++) { CmbAppPresence.Items.Add(AvailailityTable[i, 0]); } //Timer setup dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = new TimeSpan(0, 0, Properties.Settings.Default.PingFreq); dispatcherTimer.Start(); connectionCheck = eConnectionCheck.Wait; //Set up Skype client and events skypeSetUp(); if (!contactInfoChangedSetUpDone) { CmbAppPresence.SelectedIndex = 0; } }
//--Timer event private void dispatcherTimer_Tick(object sender, EventArgs e) { //check connection with arduino switch (connectionCheck) { case eConnectionCheck.PingReceived: connectionCheck = eConnectionCheck.Wait; break; case eConnectionCheck.Wait: serial.start(); //Start connection if not already done connectionCheck = eConnectionCheck.Disconnected; lblNoConnection.Visibility = Visibility.Visible; break; case eConnectionCheck.Disconnected: serial.start(); //Start connection if not already done break; } //setup skype if not already done if (!skypeSetUpDone) { skypeSetUp(); } }
private void arduinoDisconnectedSync(object s, EventArgs e) { connectionCheck = eConnectionCheck.Disconnected; lblNoConnection.Visibility = Visibility.Visible; }
void ThreadDataReceivedSync(object s, DataEventArgs e) { if (e.Data != lastColorSend) { //Set app presence switch (e.Data) { case "PING": serial.Send("PONG"); //Set as ping received and hide no connection label connectionCheck = eConnectionCheck.PingReceived; lblNoConnection.Visibility = Visibility.Hidden; break; case "PONG": break; case "BLUE": //disconnected CmbAppPresence.Text = "Libre"; break; case "GREEN": case "ORANGE": case "RED": int index = 0; for (index = 0; index < AvailailityTable.GetLength(0); index++) { if (AvailailityTable[index, 1].Equals(e.Data)) { break; } } CmbAppPresence.SelectedIndex = index; break; } //Update Skype presence if (lblSkypeDisconnected.Visibility == Visibility.Hidden) { switch (CmbAppPresence.SelectedIndex) { case 0: SkypeUpdateAvailability(ContactAvailability.Free); break; case 1: case 5: if (skypeClient.Self.Contact.GetContactInformation(ContactInformationType.Activity).ToString().StartsWith("En ")) { break; //Do not change the availability if in call or conference } SkypeUpdateAvailability(ContactAvailability.Busy); break; case 2: SkypeUpdateAvailability(ContactAvailability.DoNotDisturb); break; case 3: SkypeUpdateAvailability(ContactAvailability.TemporarilyAway); break; case 4: SkypeUpdateAvailability(ContactAvailability.Away); break; } } } }