public override void ServerSide(List <Connection> ServerConnections, Connection ThisConnection) { //STORE THE USERS LAST STATUS IN THE DATABASE using (UserStateDataContext tmpDB = new UserStateDataContext()) { //TRY TO SELECT THE USERS LAST KNOWN STATE FROM THE DATABASE LastKnownStateItem UserState = (from a in tmpDB.LastKnownStateItems where a.UserID == ThisConnection.UserID select a).FirstOrDefault(); //IF NOTHING WAS RETURNED WE NEED TO CREATE A NEW ITEM FOR THIS USERS STATE OTHERWISE JUST MODIFY THE EXISTING ONE if (UserState == null) { UserState = new LastKnownStateItem() { LastKnownState = this.Status, UserID = ThisConnection.UserID }; tmpDB.LastKnownStateItems.InsertOnSubmit(UserState); } else { UserState.LastKnownState = this.Status; } //STORE THE CHANGES IN THE DATABASE NOW tmpDB.SubmitChanges(); } //TODO: THIS COULD BE MORE EFFICIENT IF IT ONLY PASSED THE STATUS TO CONTACTS WHO NEEDED IT foreach (Connection tmpConnection in ServerConnections) { Send(tmpConnection); } }
public override void ServerSide(List <Connection> ServerConnections, Connection ThisConnection) { IContactsProvider ContactProvider = StaticFunctions.GetContactsProvider(); //USE THE EXTERNAL LIBRARY TO GET THE CONTACTS FROM WHEREVER CONTACTS ARE PULLED this.ContactList = ContactProvider.GetContacts(ThisConnection.UserID).OrderBy(a => a.DName).OrderBy(a => a.Group).ToArray(); //SET THE USER TO ONLINE IF THEY ARE FOUND IN OUR CONNECTED LIST foreach (Contact tmpContact in this.ContactList) { if ((from a in ServerConnections where a.UserID == tmpContact.UserID select a).Count() != 0) { tmpContact.Online = true; } } //GET THE USERS LAST KNOWN STATE FROM OUR DB using (UserStateDataContext tmpDB = new UserStateDataContext()) { //LOOP THROUGH ALL OFFLINE CONTACTS AND MARK THEM AS OFFLINE foreach (Contact tmpContact in (from a in this.ContactList where a.Online == false select a)) { tmpContact.LastStatus = "Offline"; } //LOOP THROUGH ALL ONLINE CONTACTS AND TAKE THEIR STATUS FROM THE DATABASE foreach (Contact tmpContact in (from a in this.ContactList where a.Online == true select a)) { tmpContact.LastStatus = (from b in tmpDB.LastKnownStateItems where b.UserID == tmpContact.UserID select b.LastKnownState).FirstOrDefault(); } } //SEND THIS BACK TO THE CLIENT Send(ThisConnection); }