Advertisement
Guest User

Untitled

a guest
Mar 4th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.26 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Runtime.Serialization.Formatters.Binary;
  5. using System.Security.Cryptography;
  6.  
  7.  
  8. namespace DataStructures
  9. {
  10. public enum MSG_HEADER
  11. {
  12. REG_REQUEST,
  13. REG_ACK,
  14. LOGIN_REQUEST, //send usr and password
  15. LOGIN_ACK, //receive if login succeded or not
  16. FS_STATUS_GET, //send a list of FileStatus corresponding to all files in client fileSystem
  17. FS_STATUS_ACK, //receive a list of FileStatus corresponding to all files stored on server
  18. PUSH_FILE,
  19. PUSH_FILE_ACK,
  20. RESTORE_FILE,
  21. RESTORE_FILE_ACK,
  22. FILE_VERSION_GET,
  23. FILE_VERSION_ACK,
  24. DIR_VERSION_GET,
  25. DIR_VERSION_ACK,
  26. SYNC_START,
  27. SYNC_END
  28.  
  29. }
  30.  
  31. [Serializable]
  32. public class CatchallMessageModel
  33. {
  34. private MSG_HEADER _header;
  35. private object _content;
  36.  
  37. public MSG_HEADER header { get { return _header; } }
  38. public object content { get { return _content; } }
  39.  
  40. public CatchallMessageModel(MSG_HEADER header, object content)
  41. {
  42. _header = header;
  43. _content = content;
  44. }
  45.  
  46. public static byte[] serialize(CatchallMessageModel message)
  47. {
  48. byte[] result;
  49.  
  50. using (MemoryStream memStream = new MemoryStream())
  51. {
  52. BinaryFormatter serializer = new BinaryFormatter();
  53. serializer.Serialize(memStream, message);
  54. result = memStream.GetBuffer();
  55. }
  56. return result;
  57. }
  58.  
  59. public static CatchallMessageModel deserialize(byte[] buffer)
  60. {
  61.  
  62. using (MemoryStream memStream = new MemoryStream(buffer))
  63. {
  64. BinaryFormatter deserializer = new BinaryFormatter();
  65. object newobj = deserializer.Deserialize(memStream);
  66. return newobj as CatchallMessageModel;
  67. }
  68. }
  69.  
  70. }
  71.  
  72. [Serializable]
  73. public class RegistrationRequest
  74. {
  75. private string _username;
  76. private string _password;
  77.  
  78. public string username { get { return _username; } }
  79. public string password { get { return _password; } }
  80.  
  81. public RegistrationRequest(string u, string p)
  82. {
  83. _username = u;
  84. _password = p;
  85. }
  86.  
  87.  
  88. }
  89.  
  90. [Serializable]
  91. public class RegistrationAck
  92. {
  93. private bool _regSucceeded;
  94.  
  95.  
  96. public bool regSucceeded { get { return _regSucceeded; } }
  97.  
  98.  
  99. public RegistrationAck(bool success)
  100. {
  101. _regSucceeded = success;
  102. }
  103.  
  104. }
  105.  
  106. [Serializable]
  107. public class LoginRequest
  108. {
  109. private string _username;
  110. private string _password;
  111.  
  112. public string username { get { return _username; } }
  113. public string password { get { return _password; } }
  114.  
  115. public LoginRequest(string u, string p)
  116. {
  117. _username = u;
  118. _password = p;
  119. }
  120.  
  121. }
  122.  
  123. [Serializable]
  124. public class LoginAck
  125. {
  126. private bool _loginSucceeded;
  127.  
  128.  
  129. public bool loginSucceeded { get { return _loginSucceeded; } }
  130.  
  131.  
  132. public LoginAck(bool success)
  133. {
  134. _loginSucceeded = success;
  135. }
  136.  
  137. }
  138.  
  139. [Serializable]
  140. public enum FILE_POSITION { ON_CLIENT, ON_SERVER, SYNCED }
  141.  
  142. [Serializable]
  143. public class FileStatus
  144. {
  145. private string _fullName;
  146. public string fullName { get { return _fullName; } }
  147.  
  148. private string _fileSystemPath;
  149.  
  150. private byte[] _checksum;
  151. public byte[] checksum { get { return _checksum; } }
  152.  
  153. private DateTime _lastModified;
  154. public DateTime lastModified { get { return _lastModified; } }
  155.  
  156. private FILE_POSITION _position;
  157. public FILE_POSITION position
  158. {
  159. get { return _position; }
  160. }
  161.  
  162. private bool _isFolder;
  163. public bool isFolder
  164. {
  165. get { return _isFolder; }
  166. }
  167.  
  168. private int _fileSize;
  169. public int fileSize
  170. {
  171. get { return _fileSize; }
  172. set { _fileSize = value; }
  173. }
  174.  
  175. public FileStatus(string fullName, string fileSystemPath, FILE_POSITION position, DateTime lastModified, bool isFolder = false)
  176. {
  177. _fullName = fullName;
  178. _fileSystemPath = fileSystemPath;
  179. _position = position;
  180. _isFolder = isFolder;
  181. _lastModified = lastModified;
  182. try
  183. {
  184. computeChecksum();
  185. }
  186. catch (Exception ex)
  187. {
  188. throw ex;
  189. }
  190. }
  191.  
  192. public FileStatus(string fullName, FILE_POSITION position, bool isFolder = false)
  193. {
  194. _fullName = fullName;
  195. _fileSystemPath = null;
  196. _position = position;
  197. _isFolder = isFolder;
  198. _lastModified = DateTime.MinValue;
  199. _checksum = null;
  200. }
  201.  
  202. public void computeChecksum()
  203. {
  204. if (File.Exists(this._fileSystemPath))
  205.  
  206. {
  207. using (MD5 md5 = MD5.Create())
  208. {
  209. try
  210. {
  211. using (Stream fs = File.OpenRead(this._fileSystemPath))
  212. {
  213. _checksum = md5.ComputeHash(fs);
  214. }
  215. }
  216. catch (IOException ex)
  217. {
  218. throw ex;
  219. }
  220. catch (Exception ex)
  221. {
  222. throw ex;
  223. }
  224.  
  225. }
  226. }
  227. else if (Directory.Exists(this._fileSystemPath))
  228. {
  229. _isFolder = true;
  230. _checksum = null;
  231. }
  232. else
  233. {
  234. throw new Exception("File doesn't exist.");
  235. }
  236. }
  237.  
  238. public static bool operator ==(FileStatus f1, FileStatus f2)
  239. {
  240. if ((f1.fullName == f2.fullName) && (f1.checksum == f2.checksum))
  241. return true;
  242.  
  243. if ((object)f1 == null && (object)f2 == null)
  244. {
  245. return true;
  246. }
  247.  
  248. return false;
  249.  
  250. }
  251. public static bool operator !=(FileStatus f1, FileStatus f2)
  252. {
  253. if (!(f1 == f2))
  254. return true;
  255. return false;
  256. }
  257.  
  258. public override bool Equals(object obj)
  259. {
  260. return this == obj as FileStatus;
  261. }
  262. }
  263.  
  264. [Serializable]
  265. public class FileSystemStatusGet
  266. {
  267. private string _root;
  268. public string root { get { return _root; } }
  269.  
  270. private SortedList<string, FileStatus> _fileStatusList;
  271. public SortedList<string, FileStatus> fileStatusList { get { return _fileStatusList; } }
  272.  
  273. public FileSystemStatusGet(string root)
  274. {
  275. _fileStatusList = new SortedList<string, FileStatus>();
  276. _root = root;
  277. }
  278.  
  279. }
  280.  
  281. [Serializable]
  282. public class FileSystemStatusAck
  283. {
  284. private SortedList<string, FileStatus> _fileStatusList;
  285. public SortedList<string, FileStatus> fileStatusList { get { return _fileStatusList; } }
  286.  
  287. public FileSystemStatusAck()
  288. {
  289. _fileStatusList = new SortedList<string, FileStatus>();
  290. }
  291. }
  292.  
  293. [Serializable]
  294. public class PushFile
  295. {
  296. private FileStatus _fileStatus;
  297. public FileStatus fileStatus { get { return _fileStatus; } }
  298.  
  299. public PushFile(FileStatus fileStatus)
  300. {
  301. _fileStatus = fileStatus;
  302. }
  303. }
  304.  
  305. [Serializable]
  306. public class PushFileAck
  307. {
  308. private bool _success;
  309. public bool success
  310. {
  311. get { return _success; }
  312. }
  313.  
  314. public PushFileAck(bool success)
  315. {
  316. _success = success;
  317. }
  318. }
  319.  
  320. [Serializable]
  321. public class FileVersionGet
  322. {
  323. private FileStatus _fileVersion;
  324. public FileStatus fileVersion
  325. {
  326. get { return _fileVersion; }
  327. }
  328.  
  329. public FileVersionGet(FileStatus fileVersion)
  330. {
  331. _fileVersion = fileVersion;
  332. }
  333. }
  334.  
  335. [Serializable]
  336. public class FileVersionAck
  337. {
  338. private FileStatus _fileStatus;
  339. public FileStatus fileStatus
  340. {
  341. get { return _fileStatus; }
  342. }
  343. private Dictionary<int, DateTime> _fileVersions;
  344. public Dictionary<int, DateTime> fileVersions
  345. {
  346. get { return _fileVersions; }
  347. }
  348.  
  349. public FileVersionAck(FileStatus fileStatus)
  350. {
  351. _fileStatus = fileStatus;
  352. _fileVersions = new Dictionary<int, DateTime>();
  353. }
  354.  
  355. public void AddVersion(int versionId, DateTime versionDate)
  356. {
  357. _fileVersions.Add(versionId, versionDate);
  358. }
  359. }
  360.  
  361. [Serializable]
  362. public class SyncStart
  363. {
  364. private int _files_to_sync;
  365. public int files_to_sync { get { return _files_to_sync; } }
  366.  
  367. public SyncStart(int files_to_sync)
  368. {
  369. _files_to_sync = files_to_sync;
  370. }
  371. }
  372.  
  373. [Serializable]
  374. public class SyncEnd
  375. {
  376. private bool _success;
  377. public bool success { get { return _success; } }
  378.  
  379. public SyncEnd(bool success)
  380. {
  381. _success = success;
  382. }
  383. }
  384.  
  385. [Serializable]
  386. public class RestoreFile
  387. {
  388. private int _version;
  389. private string _fullName;
  390.  
  391. public int version { get { return _version; } }
  392. public string fullName { get { return _fullName; } }
  393.  
  394. public RestoreFile(int version, string fullName)
  395. {
  396. _version = version;
  397. _fullName = fullName;
  398. }
  399. }
  400.  
  401. [Serializable]
  402. public class RestoreFileAck
  403. {
  404. private int _size;
  405. public int size { get { return _size; } }
  406.  
  407. public RestoreFileAck(int size)
  408. {
  409. _size = size;
  410. }
  411. }
  412.  
  413. [Serializable]
  414. public class DirectoryVersionGet
  415. {
  416. private string _directoryName;
  417. public string directoryName
  418. {
  419. get;
  420. }
  421.  
  422. public DirectoryVersionGet(string directoryName)
  423. {
  424. _directoryName = directoryName;
  425. }
  426. }
  427.  
  428. [Serializable]
  429. public class DirectoryVersionAck
  430. {
  431. private string _directoryName;
  432. public string directoryName
  433. {
  434. get;
  435. }
  436.  
  437. private Dictionary<int, List<RestoreFile>> _directoryVersions;
  438. public Dictionary<int, List<RestoreFile>> directoryVersions
  439. {
  440. get;
  441. }
  442.  
  443. public DirectoryVersionAck(string directoryName, Dictionary<int, List<RestoreFile>> directoryVersions)
  444. {
  445. _directoryName = directoryName;
  446. _directoryVersions = directoryVersions;
  447. }
  448.  
  449. }
  450.  
  451.  
  452. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement