public void StartSession(AccountDC a)
 {
     Callback = OperationContext.Current.GetCallbackChannel<IBomberCallback>();
     using (var db = new BomberDbContext())
     {
         var query = from ac in db.Accounts
                     where ac.Login == a.Login
                     && ac.Password == a.Password
                     select ac;
         if (query.Count() == 0)
         {
             Callback.RejectConnection();
             ConnexionDenied = true;
         }
         else
         {
             var p = query.ToList<Account>().ElementAt(0).Player;
             if (Sessions.Keys.Contains(p.PlayerId))
             {
                 p.PlayerStatus = "Offline";
                 db.SaveChanges();
                 Sessions[p.PlayerId].Callback.DisconnectPlayer();
                 Callback.DisconnectPlayer();
                 return;
             }
             p.PlayerStatus = "Online";
             db.SaveChanges();
             Sessions.Add(p.PlayerId, this);
             this.Player = p;
             var profil = EntityContractTranslator.PlayerToPlayerDC(p);
             var friendShipRequests = EntityContractTranslator.PlayersToPlayerDCs(p.PlayersRequestingFriendship);
             //notifying connected friends:
             var connectedFriends = from f in p.Friends
                                    where Sessions.Keys.Contains(f.PlayerId)
                                    select f;
             foreach (var f in connectedFriends)
             {
                 var session = Sessions[f.PlayerId];
                 session.Callback.NotifyPlayerStatusChange(profil);
             }
             //retrieving conversations
             List<Conversation> convs = new List<Conversation>();
             foreach (var c in db.Conversations)
             {
                 if (c.Host.PlayerId == p.PlayerId || (from pl in c.Players select pl.PlayerId).Contains(p.PlayerId))
                     convs.Add(c);
             }
             List<ConversationDC> playerConvDCs = new List<ConversationDC>();
             if (convs.Count > 0)
             {
                 foreach (var c in convs)
                 {
                     ConversationManager cm = null;
                     if (Conversations.Keys.Contains(c.ConversationId))
                     {
                         cm = Conversations[c.ConversationId];
                     }
                     else
                     {
                         cm = new ConversationManager(new ConversationDC()
                         {
                             ConversationId = c.ConversationId,
                             Host = EntityContractTranslator.PlayerToPlayerDC(c.Host),
                             ConversationLog = c.ConversationLog,
                             Participants = EntityContractTranslator.PlayersToPlayerDCs(c.Players),
                             NewMessage = ""
                         });
                         Conversations.Add(cm.Conv.ConversationId, cm);
                     }
                     playerConvDCs.Add(cm.Conv);
                     cm.EndOfConvEvent += EndOfConvEventHandler;
                     cm.JoinEvent += JoinConvEventHandler;
                     cm.KickEvent += KickFromConvEventHandler;
                     cm.LeaveEvent += LeaveConvEventHandler;
                     cm.MessageEvent += ConvMessageEventHandler;
                 }
             }
             Callback.ReceiveProfil(profil, friendShipRequests, playerConvDCs);
         }
     }
 }
 public void CreateAccount(AccountDC newAccount, PlayerDC player)
 {
     Callback = OperationContext.Current.GetCallbackChannel<IBomberCallback>();
     using (var db = new BomberDbContext())
     {
         var p = new Player()
         {
             Pseudonym = player.Pseudonym,
             PlayerStatus = "Offline",
             PlayerDescription = player.PlayerDescription
         };
         var a = new Account()
         {
             Login = newAccount.Login,
             Password = newAccount.Password,
             AccountType = "normal",
             Player = p
         };
         p.Account = a;
         db.Accounts.AddObject(a);
         db.Players.AddObject(p);
         try
         {
             db.SaveChanges();
             Callback.NotifySubscriptionSuccess();
         }
         catch
         {
             Callback.RefuseSubscription();
         }
     }
 }