public static void refreshNick(string nick, string macHash) { using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qu = from u in ctx.Users where u.Username.Equals (nick) select u; if (qu.Count() != 1) { throw new NickNotFoundException(); } User user = qu.First(); if(user == null || user.Password == null || !user.Password.Equals(macHash)){ throw new NickPasswordException(); } user.LastOnline = DateTime.UtcNow; ctx.SaveChanges(); } conn.CommitTransaction(); } catch (NickNotFoundException ne) { conn.RollbackTransaction(); throw ne; } catch (NickPasswordException pe) { conn.RollbackTransaction(); throw pe; } catch (Exception e) { conn.RollbackTransaction(); System.Console.Error.WriteLine (e.Message); System.Console.Error.WriteLine (e.StackTrace); throw new NickRegistrationFailedException(e.Message, e); } } }
public static List<Memo> getMemos(string user) { List<Memo> memoList = new List<Memo>(); using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var q = from u in ctx.Users where u.Username.Equals (user) select u; if (q.Count() != 1) { conn.CommitTransaction(); return null; } User theUser = q.First(); foreach(Memo m in theUser.Memos) { if(m.Unread){ memoList.Add(new Memo{ Message = m.Message, Sender = m.Sender, Timestamp = m.Timestamp }); m.Unread = false; } else { theUser.Memos.Remove(m); } } ctx.SaveChanges(); } conn.CommitTransaction(); return memoList; } catch { conn.RollbackTransaction(); throw; } } }
public static void kickoutPeer(string hash, string kickerHash) { using (MemoDbConnection conn = new MemoDbConnection ()) { conn.BeginTransaction (); try { using (MemoDbContext ctx = new MemoDbContext (conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qp = from p in ctx.Peers where p.MAC_AddressHash.Equals (kickerHash) select p; if (qp.Count () != 1) { throw new PeerPasswordException(); } var qk = from p in ctx.Peers where p.MAC_AddressHash.Equals (kickerHash) select p; foreach(Peer p in qk){ ctx.Peers.Remove(p); } ctx.SaveChanges(); } conn.CommitTransaction (); } catch (PeerPasswordException ppe){ conn.RollbackTransaction (); throw ppe; } catch (Exception e){ conn.RollbackTransaction (); throw new PeerRegistrationFailedException(e.Message, e); } } }
public static void registerNick(string nick, string macHash) { using (MemoDbConnection conn = new MemoDbConnection()) { try { refreshNick(nick, macHash); } catch {} conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qu = from u in ctx.Users where u.Username.Equals (nick) select u; if (qu.Count() > 0) { foreach(User u in qu){ if(u.LastOnline.Add(TIMEOUT).CompareTo(DateTime.UtcNow) > 0){ throw new NickAlreadyRegistratedException(); } else { ctx.Users.Remove(u); } } } User nu = new User { LastOnline = DateTime.UtcNow, Username = nick, Password = macHash }; ctx.Users.Add(nu); ctx.SaveChanges(); } conn.CommitTransaction(); } catch (NickAlreadyRegistratedException ne) { conn.RollbackTransaction(); throw ne; } catch (Exception e) { conn.RollbackTransaction(); System.Console.Error.WriteLine (e.Message); System.Console.Error.WriteLine (e.StackTrace); throw new NickRegistrationFailedException(e.Message, e); } } }
public static void registerPeer(string hash, Uri clientUri) { using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qp = from p in ctx.Peers where p.MAC_AddressHash.Equals (hash) select p; if (qp.Count () > 1) { throw new PeerAlreadyRegistratedException(); } Peer peer; if (qp.Count () == 0) { peer = new Peer { Address = clientUri.ToString(), MAC_AddressHash = hash }; } else { peer = qp.First (); } ctx.Peers.Add(peer); ctx.SaveChanges(); } conn.CommitTransaction (); } catch (PeerAlreadyRegistratedException pare){ conn.RollbackTransaction(); throw pare; } catch (Exception e) { conn.RollbackTransaction(); System.Console.Error.WriteLine (e.Message); System.Console.Error.WriteLine (e.StackTrace); throw new PeerRegistrationFailedException(e.Message, e); } } }
public static void initAnon() { using (MemoDbConnection conn = new MemoDbConnection()) { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { //var q = from u in ctx.Users where // u.Username.Equals (ANON_NAME) // select u; var q = from u in ctx.Users select u; if (q.Count() < 1) { var anon = new User (); anon.Username = ANON_NAME; anon.LastOnline = DateTime.Now; anon.Password = "******"; conn.BeginTransaction (); try { ctx.Database.UseTransaction (conn.Transaction); ctx.Users.Add (anon); ctx.SaveChanges (); conn.CommitTransaction (); } catch { conn.RollbackTransaction (); } } } } }
public static void putMemo(string message, string to, string from) { Memo memo = new Memo(message, from); using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var q = from u in ctx.Users where u.Username.Equals (to) select u; if (q.Count() != 1) { conn.CommitTransaction(); return; } User toUser = q.First(); ctx.Memos.Add(memo); toUser.Memos.Add(memo); ctx.SaveChanges(); } conn.CommitTransaction(); } catch { conn.RollbackTransaction(); throw; } } }