void tc_OnPersonLeft(object sender, PersonPresenceChangedEventArgs e)
 {
     ShowTip(e, false);
 }
 private void ShowTip(PersonPresenceChangedEventArgs e, bool arrived)
 {
     string action = arrived ? "Arrived" : "Left";
     ShowTip(string.Format("{0} has {1} at {2}", e.Name, action, e.ChangeTimeUtc.ToLocalTime().ToShortTimeString()));
 }
 void tc_OnPersonArrived(object sender, PersonPresenceChangedEventArgs e)
 {
     ShowTip(e, true);
 }
 protected override void HandlePersonLeft(object sender, PersonPresenceChangedEventArgs e)
 {
     if (e.Name == "Oron") NotifyOronLeftHome();
     else if (e.Name == "Galia") NotifyGaliaLeftHome();
 }
 void Notify(EventHandler<PersonPresenceChangedEventArgs> handler, PersonPresenceChangedEventArgs e)
 {
     var tmp = handler;
     if (tmp != null) tmp(this, e);
 }
 private void homeController_OnPersonLeft(object sender, PersonPresenceChangedEventArgs e)
 {
     HandlePersonLeft(sender, e);
     Notify(this.OnPersonLeft, e);
 }
 protected virtual void HandlePersonLeft(object sender, PersonPresenceChangedEventArgs e)
 {
 }
        private void Notify(EventHandler<Contracts.PersonPresenceChangedEventArgs> handler, HomeControl.PersonPresenceChangedEventArgs e)
        {
            var tmp = handler;
            var eventArgs = new Contracts.PersonPresenceChangedEventArgs(e);
            if (tmp != null) tmp(this, eventArgs);

            var personState = this.State.FirstOrDefault(ps => ps.name == e.Name);
            if (personState != null)
            {
                Parallel.ForEach(reporters, reporter =>
                {
                    try
                    {
                        log.DebugFormat("Reporting person state for {0} with {1}", personState.name, reporter);
                        reporter.ReportPersonState(personState);
                    }
                    catch (Exception ex)
                    {
                        log.Error(string.Format("Error reporting presence for {0} with reporter {1}", personState.name, reporter.ToString()), ex);
                    }
                });
            }
        }