Advertisement
Guest User

fuck you mpgh

a guest
Nov 27th, 2013
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.53 KB | None | 0 0
  1. /*
  2.  *
  3.  * File Name: UserAccountManager.cs
  4.  * Initial Author: Elio Deçolli
  5.  * Purpose: Provides a account login/register internal operation, a caching system and a EGNoSQL database management.
  6.  * Last Code Cache Update: 27/11/2013
  7.  *
  8.  */
  9.  
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using eGamers;
  15. using System.IO;
  16. using System.Drawing;
  17.  
  18. // TODO: Make the cache so when it reaches a certain amount of data it will write it all into the databases to keep it safe and then reload itself.
  19.  
  20. namespace EGMasterServer2
  21. {
  22.     public class UserAccount
  23.     {
  24.         public enum UserGender
  25.         {
  26.             Male,
  27.             Female,
  28.             Potato
  29.         }
  30.  
  31.         public enum UserStatus
  32.         {
  33.             Online,
  34.             Offline,
  35.             Away,
  36.             Busy
  37.         }
  38.  
  39.         private string username;
  40.         private string password;
  41.         private int id;
  42.         private UserGender gender;
  43.         private UserStatus status;
  44.         private string ip;
  45.         private byte[] avatar;
  46.  
  47.         public byte[] ToArray()
  48.         {
  49.             MemoryStream memsr = new MemoryStream();
  50.             BinaryWriter writer = new BinaryWriter(memsr);
  51.  
  52.             // Body: Username, Password, ID, Gender, Status, IP, Avatar Length, Avatar
  53.             writer.Write(username);
  54.             writer.Write(password);
  55.             writer.Write(id);
  56.             writer.Write((int)gender);
  57.             writer.Write((int)status);
  58.             writer.Write(ip);
  59.             writer.Write(avatar.Length);
  60.             writer.Write(avatar);
  61.             writer.Flush();
  62.  
  63.             return memsr.ToArray();
  64.         }
  65.  
  66.         public static UserAccount Read(byte[] array)
  67.         {
  68.             MemoryStream memsr = new MemoryStream(array);
  69.             BinaryReader reader = new BinaryReader(memsr);
  70.  
  71.             string u = reader.ReadString();
  72.             string p = reader.ReadString();
  73.             int id = reader.ReadInt32();
  74.             UserGender gender = (UserGender)reader.ReadInt32();
  75.             UserStatus status = (UserStatus)reader.ReadInt32();
  76.             string ip = reader.ReadString();
  77.             int aLen = reader.ReadInt32();
  78.             byte[] av = reader.ReadBytes(aLen);
  79.  
  80.             return new UserAccount(u, p, id, gender, status, ip, av);
  81.         }
  82.  
  83.         public UserAccount(string u, string p, int i, UserGender g, UserStatus s, string ipaddress, byte[] a)
  84.         {
  85.             username = u;
  86.             password = p;
  87.             id = i;
  88.             gender = g;
  89.             status = s;
  90.             ip = ipaddress;
  91.             avatar = a;
  92.         }
  93.  
  94.         public string Username { get { return username; } set { username = value; } }
  95.         public string Password { get { return password; } set { password = value; } }
  96.         public int ID { get { return id; } }
  97.         public UserGender Gender { get { return gender; } }
  98.         public UserStatus Status { get { return status; } set { status = value; } }
  99.         public string IP { get { return ip; } set { ip = value; } }
  100.         public byte[] Avatar { get { return avatar; } }
  101.  
  102.         public bool IsOnline()
  103.         {
  104.             if (status == UserStatus.Offline)
  105.                 return false;
  106.             return true;
  107.         }
  108.  
  109.         public void ChangeAvatar(Image nAvatar)
  110.         {
  111.             MemoryStream memsr = new MemoryStream();
  112.             nAvatar.Save(memsr, nAvatar.RawFormat);
  113.             avatar = memsr.ToArray();
  114.         }
  115.     }
  116.  
  117.     public enum UserLoginResult
  118.     {
  119.         InvalidUsername,
  120.         WrongPassword,
  121.         Success
  122.     }
  123.  
  124.     public enum UserRegisterResult
  125.     {
  126.         InvalidUsername,
  127.         InvalidPassword,
  128.         Success
  129.     }
  130.  
  131.     public static class UserAccountManager
  132.     {
  133.         private static Dictionary<CachedDataType, EGNoSqlDatabase> Databases = new Dictionary<CachedDataType, EGNoSqlDatabase>();
  134.  
  135.         /*private static List<LikeCachedData> LikesCachedData = new List<LikeCachedData>();
  136.         private static List<CommentCachedData> CommentsCachedData = new List<CommentCachedData>();
  137.         private static List<PhotoCachedData> PhotosCachedData = new List<PhotoCachedData>();
  138.         private static List<SocialStatusCachedData> SocialStatusesCachedData = new List<SocialStatusCachedData>();*/
  139.  
  140.         private static Dictionary<CachedDataType, CachedData> Cache = new Dictionary<CachedDataType, CachedData>();
  141.  
  142.         public static void UpdateDatabases(bool clearCache)
  143.         {
  144.             Log.Info("Fetching databases with cache data...");
  145.             var comments = (from i in Cache.Values where i.Type == CachedDataType.Comments select i).ToArray();
  146.             var likes = (from i in Cache.Values where i.Type == CachedDataType.Likes select i).ToArray();
  147.             var photos = (from i in Cache.Values where i.Type == CachedDataType.Photos select i).ToArray();
  148.             var socialStatuses = (from i in Cache.Values where i.Type == CachedDataType.Statuses select i).ToArray();
  149.  
  150.             foreach (var v in comments)
  151.             {
  152.                 List<byte[]> data = new List<byte[]>();
  153.                 data.Add(v.ToArray());
  154.                 Databases[CachedDataType.Comments].AddRow(new EGNoSqlVirtualRow(new string[] { "MemCache" }, data));
  155.             }
  156.             foreach (var v in likes)
  157.             {
  158.                 List<byte[]> data = new List<byte[]>();
  159.                 data.Add(v.ToArray());
  160.                 Databases[CachedDataType.Likes].AddRow(new EGNoSqlVirtualRow(new string[] { "MemCache" }, data));
  161.             }
  162.             foreach (var v in photos)
  163.             {
  164.                 List<byte[]> data = new List<byte[]>();
  165.                 data.Add(v.ToArray());
  166.                 Databases[CachedDataType.Photos].AddRow(new EGNoSqlVirtualRow(new string[] { "MemCache" }, data));
  167.             }
  168.             foreach (var v in socialStatuses)
  169.             {
  170.                 List<byte[]> data = new List<byte[]>();
  171.                 data.Add(v.ToArray());
  172.                 Databases[CachedDataType.Statuses].AddRow(new EGNoSqlVirtualRow(new string[] { "MemCache" }, data));
  173.             }
  174.  
  175.             if (clearCache)
  176.             {                
  177.                 Log.Info("Clearing cache...");
  178.                 Cache.Clear();
  179.             }
  180.             Log.Info("Updating databases...");
  181.             foreach (var v in Databases.Values)
  182.             {
  183.                 v.SaveToFile();
  184.             }
  185.             Log.Info("Databases has been updated!");
  186.         }
  187.  
  188.         public static void LoadCache()
  189.         {
  190.             if (Databases.Count == 0)
  191.             {
  192.                 LoadDatabases();
  193.             }
  194.  
  195.             Log.Info("Loading Cache...");
  196.             if (Cache.Count > 0)
  197.                 Cache.Clear();
  198.  
  199.             // Update the statuses cache...
  200.             foreach (byte[] array in Databases[CachedDataType.Statuses].FindCellData("MemCache"))
  201.             {
  202.                 Cache.Add(CachedDataType.Statuses, CachedData.Load(array));
  203.             }
  204.  
  205.             // Update the comments cache...
  206.             foreach (byte[] array in Databases[CachedDataType.Comments].FindCellData("MemCache"))
  207.             {
  208.                 Cache.Add(CachedDataType.Comments, CachedData.Load(array));
  209.             }
  210.  
  211.             // Update the likes cache...
  212.             foreach (byte[] array in Databases[CachedDataType.Likes].FindCellData("MemCache"))
  213.             {
  214.                 Cache.Add(CachedDataType.Likes, CachedData.Load(array));
  215.             }
  216.  
  217.             // Update the photos cache...
  218.             foreach (byte[] array in Databases[CachedDataType.Photos].FindCellData("MemCache"))
  219.             {
  220.                 Cache.Add(CachedDataType.Photos, CachedData.Load(array));
  221.             }
  222.             Log.Info("Loaded Cache!");
  223.         }
  224.  
  225.         public static void LoadDatabases()
  226.         {
  227.             Log.Info("Loading Databases...");
  228.             if (Databases.Count > 0)
  229.                 Databases.Clear();
  230.  
  231.             EGNoSqlDatabase users = new EGNoSqlDatabase(".\\db\\Users.db");
  232.             EGNoSqlDatabase comments = new EGNoSqlDatabase(".\\db\\Comments.db");
  233.             EGNoSqlDatabase likes = new EGNoSqlDatabase(".\\db\\Likes.db");
  234.             EGNoSqlDatabase photos = new EGNoSqlDatabase(".\\db\\Photos.db");
  235.             EGNoSqlDatabase socialStatuses = new EGNoSqlDatabase(".\\db\\SocialStatuses.db");
  236.  
  237.             Databases.Add(CachedDataType.Users, users);
  238.             Databases.Add(CachedDataType.Comments, comments);
  239.             Databases.Add(CachedDataType.Likes, likes);
  240.             Databases.Add(CachedDataType.Photos, photos);
  241.             Databases.Add(CachedDataType.Statuses, socialStatuses);
  242.  
  243.             if (Cache.Count == 0)
  244.             {
  245.                 LoadCache();
  246.             }
  247.            
  248.             Log.Info("Databases has been loaded!");
  249.         }
  250.  
  251.         public static CachedData[] FindAllComments()
  252.         {
  253.             if (Cache.Count == 0)
  254.             {
  255.                 LoadCache();
  256.             }
  257.  
  258.             var comments = from CachedData i in Cache.Values where i.Type == CachedDataType.Comments select i;
  259.             return comments.ToArray();
  260.         }
  261.  
  262.         public static CachedData[] FindAllLikes()
  263.         {
  264.             if (Cache.Count == 0)
  265.             {
  266.                 LoadCache();
  267.             }
  268.  
  269.             var comments = from CachedData i in Cache.Values where i.Type == CachedDataType.Likes select i;
  270.             return comments.ToArray();
  271.         }
  272.  
  273.         public static CachedData[] FindAllPhotos()
  274.         {
  275.             if (Cache.Count == 0)
  276.             {
  277.                 LoadCache();
  278.             }
  279.  
  280.             var comments = from CachedData i in Cache.Values where i.Type == CachedDataType.Photos select i;
  281.             return comments.ToArray();
  282.         }
  283.  
  284.         public static CachedData[] FindAllStatuses()
  285.         {
  286.             if (Cache.Count == 0)
  287.             {
  288.                 LoadCache();
  289.             }
  290.  
  291.             var comments = from CachedData i in Cache.Values where i.Type == CachedDataType.Statuses select i;
  292.             return comments.ToArray();
  293.         }
  294.  
  295.         public static CachedData[] FilterCachedDataByUser(int userID, CachedDataType type)
  296.         {
  297.             var data = from CachedData i in Cache.Values where ((i.Type == type) && (i.UserID == userID)) select i;
  298.             return data.ToArray();
  299.         }
  300.  
  301.         public static CachedData[] FilterCachedDataByUser(string username, CachedDataType type)
  302.         {
  303.             var data = from CachedData i in Cache.Values where ((i.Type == type) && (i.Username == username)) select i;
  304.             return data.ToArray();
  305.         }
  306.  
  307.         public static void InstertIntoCache(CachedDataType type, CachedData data)
  308.         {
  309.             Cache.Add(type, data);
  310.             List<byte[]> dataSegment = new List<byte[]>();
  311.             dataSegment.Add(data.ToArray());
  312.             Databases[type].AddRow(new EGNoSqlVirtualRow(new string[]{"MemCache"}, dataSegment));
  313.         }
  314.  
  315.         public static UserRegisterResult RegisterUser(string username, string password, string ip, byte[] avatar, UserAccount.UserGender gender)
  316.         {
  317.             foreach (var v in Databases[CachedDataType.Users].FindCellData("Username"))
  318.             {
  319.                 string uname = Encoding.ASCII.GetString(v);
  320.                 if (uname == username)
  321.                     return UserRegisterResult.InvalidUsername;
  322.             }
  323.             if (password.Length < 6)
  324.                 return UserRegisterResult.InvalidPassword;
  325.  
  326.             //UserAccount acc = new UserAccount(username, password, Databases[CachedDataType.Users].RowCount + 1, gender, UserAccount.UserStatus.Offline, ip, avatar);
  327.             List<byte[]> datas = new List<byte[]>();
  328.             datas.Add(Encoding.ASCII.GetBytes(username));
  329.             datas.Add(Encoding.ASCII.GetBytes(password));
  330.             datas.Add(BitConverter.GetBytes(Databases[CachedDataType.Users].RowCount + 1));
  331.             datas.Add(BitConverter.GetBytes((int)gender));
  332.             datas.Add(BitConverter.GetBytes((int)UserAccount.UserStatus.Offline));
  333.             datas.Add(Encoding.ASCII.GetBytes(ip));
  334.             datas.Add(avatar);
  335.             Databases[CachedDataType.Users].AddRow(new EGNoSqlVirtualRow(new string[] { "Username", "Password", "ID", "Gender", "Status", "IP", "Avatar" }, datas));
  336.             return UserRegisterResult.Success;
  337.         }
  338.  
  339.         public static UserLoginResult Login(string username, string password, string ip, UserAccount.UserStatus status)
  340.         {
  341.         //Working on this atm.
  342.         }
  343.     }
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement