public void RegisterPhone(Guid phoneId, string channelUri, string username)
 {
     using (EmergencyDBEntities context = new EmergencyDBEntities())
     {
         int clientId;
         var deviceId = phoneId.ToString();
         var deviceI = (from c in context.Devices
                        where c.DeviceID == deviceId
                        select c).FirstOrDefault<Device>();
         using (EmergencyDBEntities context2 = new EmergencyDBEntities())
         {
             clientId = (from c in context.Clients
                         where c.Username == username
                         select c.ClientID).FirstOrDefault();
         }
         if (context.Devices.Count() == 0 || deviceI == null)
         {
             context.Devices.AddObject(new Device { DeviceID = phoneId.ToString(), DeviceUrl = channelUri, ClientID = clientId });
             context.SaveChanges();
         }
         foreach (var device in context.Devices)
         {
             Debug.WriteLine(device.DeviceID.ToString());
             if (device.DeviceID == phoneId.ToString())
                 if (device.DeviceUrl != channelUri)
                     device.DeviceUrl = channelUri;
                 else if (device.ClientID != clientId)
                     device.ClientID = clientId;
         }
         context.SaveChanges();
     }
 }
        public void CompleteFriendshipRequest(string clientUsername, string friendUsername, bool status)
        {
            string notificationStatus = "";
            string notificationChannelStatus = "";
            string deviceConnectionStatus = "";

            Client clientDB, friendDB;
            using (EmergencyDBEntities context = new EmergencyDBEntities())
            {
                clientDB = (from c in context.Clients
                            where clientUsername == c.Username
                            select c).FirstOrDefault();
            }
            using (EmergencyDBEntities context = new EmergencyDBEntities())
            {
                friendDB = (from c in context.Clients
                            where friendUsername == c.Username
                            select c).FirstOrDefault();
            }
            using (EmergencyDBEntities context = new EmergencyDBEntities())
            {
                byte[] payload = new byte[0];

                if (status)
                {
                    foreach (var friendToUpdate in context.Friendships)
                    {
                        if (friendToUpdate.ClientID == friendDB.ClientID && friendToUpdate.FriendID == clientDB.ClientID && friendToUpdate.Status == false)
                            friendToUpdate.Status = status;
                    }
                    context.Friendships.AddObject(new Friendship() { ClientID = clientDB.ClientID, FriendID = friendDB.ClientID, Status = true });
                    context.SaveChanges();

                    payload = GetToastPayload("Friend request confirmed by:", clientDB.FirstName + " " + clientDB.LastName);

                }
                else
                {
                    context.Friendships.DeleteObject((from f in context.Friendships
                                                      where f.ClientID == friendDB.ClientID && f.FriendID == clientDB.ClientID && f.Status == status
                                                      select f).FirstOrDefault());
                    context.SaveChanges();

                    payload = GetToastPayload("Friend request disconfirmed by:", clientDB.FirstName + " " + clientDB.LastName);

                }

                List<string> uriStrings;

                using (EmergencyDBEntities context2 = new EmergencyDBEntities())
                {
                    uriStrings = (from d in context2.Devices
                                  where d.ClientID == friendDB.ClientID
                                  select d.DeviceUrl).ToList<string>();
                }

                foreach (var uriString in uriStrings)
                {
                    Uri uri = new Uri(uriString);

                    var requestToast = (HttpWebRequest)WebRequest.Create(uri);
                    requestToast.Method = "POST";
                    requestToast.ContentType = "text/xml";

                    requestToast.Headers.Add("X-WindowsPhone-Target", "toast");
                    requestToast.Headers.Add("X-NotificationClass", "2");

                    requestToast.ContentLength = payload.Length;

                    using (Stream requestStream = requestToast.GetRequestStream())
                    {
                        requestStream.Write(payload, 0, payload.Length);
                    }

                    try
                    {
                        var response = (HttpWebResponse)requestToast.GetResponse();

                        notificationStatus = response.Headers["X-NotificationStatus"];
                        notificationChannelStatus = response.Headers["X-SubscriptionStatus"];
                        deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];
                    }
                    catch (Exception) { }
                }
            }
        }
        public string DeleteFriend(string clientUsername, string friendUsername)
        {
            string notificationStatusToast = "";
            string notificationChannelStatusToast = "";
            string deviceConnectionStatusToast = "";

            Client friendDB, clientDB;
            using (EmergencyDBEntities context = new EmergencyDBEntities())
            {
                friendDB = (from c in context.Clients
                            where friendUsername == c.Username
                            select c).FirstOrDefault();
            }
            using (EmergencyDBEntities context = new EmergencyDBEntities())
            {
                clientDB = (from c in context.Clients
                            where clientUsername == c.Username
                            select c).FirstOrDefault();
            }

            using (EmergencyDBEntities context = new EmergencyDBEntities())
            {
                context.Friendships.DeleteObject((from f in context.Friendships
                                                  where f.ClientID == friendDB.ClientID && f.FriendID == clientDB.ClientID
                                                  select f).FirstOrDefault());
                context.Friendships.DeleteObject((from f in context.Friendships
                                                  where f.ClientID == clientDB.ClientID && f.FriendID == friendDB.ClientID
                                                  select f).FirstOrDefault());
                context.SaveChanges();
            }
            List<string> uriStrings;
            using (EmergencyDBEntities context = new EmergencyDBEntities())
            {
                uriStrings = (from d in context.Devices
                              where d.ClientID == friendDB.ClientID
                              select d.DeviceUrl).ToList<string>();
            }
            if (uriStrings.Count != 0)
            {
                foreach (var uriString in uriStrings)
                {
                    Uri uri = new Uri(uriString);
                    byte[] payload = new byte[0];

                    var requestToast = (HttpWebRequest)WebRequest.Create(uri);
                    requestToast.Method = "POST";
                    requestToast.ContentType = "text/xml";

                    payload = GetToastPayload("Friend request:", clientDB.FirstName + " " + clientDB.LastName);
                    requestToast.Headers.Add("X-WindowsPhone-Target", "toast");
                    requestToast.Headers.Add("X-NotificationClass", "2");

                    requestToast.ContentLength = payload.Length;

                    using (Stream requestStream = requestToast.GetRequestStream())
                    {
                        requestStream.Write(payload, 0, payload.Length);
                    }

                    try
                    {
                        var responseToast = (HttpWebResponse)requestToast.GetResponse();

                        notificationStatusToast = responseToast.Headers["X-NotificationStatus"];
                        notificationChannelStatusToast = responseToast.Headers["X-SubscriptionStatus"];
                        deviceConnectionStatusToast = responseToast.Headers["X-DeviceConnectionStatus"];
                        //return "Friend have been deleted " + friendDB.FirstName + " " + friendDB.LastName + ".";
                    }
                    catch (Exception ex) { }//return "Failed to send delete notification. Exception: " + ex.Message; }
                }
                return friendDB.FirstName + " " + friendDB.LastName + " have been deleted.";
            }
            else
                return "Friend doesn't have any device.";
        }
 public string ClientRegistration(ClientData client, string password)
 {
     using (EmergencyDBEntities context = new EmergencyDBEntities())
     {
         if ((from c in context.Clients
              where c.Username == client.Username
              select c).FirstOrDefault() != null)
         { return "User with current username is already exist. Please choose another username."; }
         else if ((from c in context.Clients
                   where c.Email == client.Email
                   select c).FirstOrDefault() != null)
         { return "User with current email is already exist. Please enter another email address."; }
         else
         {
             context.Clients.AddObject(new Client { Username = client.Username, Password = password, Email = client.Email, FirstName = client.FirstName, LastName = client.LastName, Age = client.Age });
             context.SaveChanges();
             return "Your account is successfully registered.";
         }
     }
 }