Advertisement
Guest User

Untitled

a guest
Apr 28th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.04 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. private string _root;
  112.  
  113. public string username { get { return _username; } }
  114. public string password { get { return _password; } }
  115. public string root { get { return _root; } }
  116.  
  117. public LoginRequest(string u, string p, string root)
  118. {
  119. _username = u;
  120. _password = p;
  121. _root = root;
  122. }
  123.  
  124. }
  125.  
  126. [Serializable]
  127. public class LoginAck
  128. {
  129. private bool _loginSucceeded;
  130.  
  131.  
  132. public bool loginSucceeded { get { return _loginSucceeded; } }
  133.  
  134.  
  135. public LoginAck(bool success)
  136. {
  137. _loginSucceeded = success;
  138. }
  139.  
  140. }
  141.  
  142. [Serializable]
  143. public enum FILE_POSITION { ON_CLIENT, ON_SERVER, SYNCED }
  144.  
  145. [Serializable]
  146. public class FileStatus
  147. {
  148. private string _fullName;
  149. public string fullName { get { return _fullName; } }
  150.  
  151. private string _fileSystemPath;
  152. public string fileSystemPath { get { return _fileSystemPath; } }
  153.  
  154. private byte[] _checksum;
  155. public byte[] checksum { get { return _checksum; } }
  156.  
  157. private DateTime _lastModified;
  158. public DateTime lastModified { get { return _lastModified; } }
  159.  
  160. private FILE_POSITION _position;
  161. public FILE_POSITION position
  162. {
  163. get { return _position; }
  164. }
  165.  
  166. private bool _isFolder;
  167. public bool isFolder
  168. {
  169. get { return _isFolder; }
  170. }
  171.  
  172. private int _fileSize;
  173. public int fileSize
  174. {
  175. get { return _fileSize; }
  176. set { _fileSize = value; }
  177. }
  178.  
  179. public FileStatus(string fullName, string fileSystemPath, FILE_POSITION position, DateTime lastModified, bool isFolder = false)
  180. {
  181. _fullName = fullName;
  182. _fileSystemPath = fileSystemPath;
  183. _position = position;
  184. _isFolder = isFolder;
  185. _lastModified = lastModified;
  186. try
  187. {
  188. computeChecksum();
  189. }
  190. catch (Exception ex)
  191. {
  192. throw ex;
  193. }
  194. }
  195.  
  196. public FileStatus(string fullName, FILE_POSITION position, bool isFolder = false)
  197. {
  198. _fullName = fullName;
  199. _fileSystemPath = null;
  200. _position = position;
  201. _isFolder = isFolder;
  202. _lastModified = DateTime.MinValue;
  203. _checksum = null;
  204. }
  205.  
  206. public void computeChecksum()
  207. {
  208. if (File.Exists(this._fileSystemPath))
  209.  
  210. {
  211. using (MD5 md5 = MD5.Create())
  212. {
  213. try
  214. {
  215. using (Stream fs = File.OpenRead(this._fileSystemPath))
  216. {
  217. _checksum = md5.ComputeHash(fs);
  218. }
  219. }
  220. catch (IOException ex)
  221. {
  222. throw ex;
  223. }
  224. catch (Exception ex)
  225. {
  226. throw ex;
  227. }
  228.  
  229. }
  230. }
  231. else if (Directory.Exists(this._fileSystemPath))
  232. {
  233. _isFolder = true;
  234. _checksum = null;
  235. }
  236. else
  237. {
  238. throw new Exception("File doesn't exist.");
  239. }
  240. }
  241.  
  242. public static bool operator ==(FileStatus f1, FileStatus f2)
  243. {
  244. if ((f1.fullName == f2.fullName) && (f1.checksum == f2.checksum))
  245. return true;
  246.  
  247. if ((object)f1 == null && (object)f2 == null)
  248. {
  249. return true;
  250. }
  251.  
  252. return false;
  253.  
  254. }
  255. public static bool operator !=(FileStatus f1, FileStatus f2)
  256. {
  257. if (!(f1 == f2))
  258. return true;
  259. return false;
  260. }
  261.  
  262. public override bool Equals(object obj)
  263. {
  264. return this == obj as FileStatus;
  265. }
  266. }
  267.  
  268. [Serializable]
  269. public class FileSystemStatusGet
  270. {
  271. private string _root;
  272. public string root { get { return _root; } }
  273.  
  274. private SortedList<string, FileStatus> _fileStatusList;
  275. public SortedList<string, FileStatus> fileStatusList { get { return _fileStatusList; } }
  276.  
  277. public FileSystemStatusGet(string root)
  278. {
  279. _fileStatusList = new SortedList<string, FileStatus>();
  280. _root = root;
  281. }
  282.  
  283. }
  284.  
  285. [Serializable]
  286. public class FileSystemStatusAck
  287. {
  288. private SortedList<string, FileStatus> _fileStatusList;
  289. public SortedList<string, FileStatus> fileStatusList { get { return _fileStatusList; } }
  290.  
  291. public FileSystemStatusAck()
  292. {
  293. _fileStatusList = new SortedList<string, FileStatus>();
  294. }
  295. }
  296.  
  297. [Serializable]
  298. public class PushFile
  299. {
  300. private FileStatus _fileStatus;
  301. public FileStatus fileStatus { get { return _fileStatus; } }
  302.  
  303. public PushFile(FileStatus fileStatus)
  304. {
  305. _fileStatus = fileStatus;
  306. }
  307. }
  308.  
  309. [Serializable]
  310. public class PushFileAck
  311. {
  312. private bool _success;
  313. public bool success
  314. {
  315. get { return _success; }
  316. }
  317.  
  318. public PushFileAck(bool success)
  319. {
  320. _success = success;
  321. }
  322. }
  323.  
  324. [Serializable]
  325. public class FileVersionGet
  326. {
  327. private FileStatus _fileVersion;
  328. public FileStatus fileVersion
  329. {
  330. get { return _fileVersion; }
  331. }
  332.  
  333. public FileVersionGet(FileStatus fileVersion)
  334. {
  335. _fileVersion = fileVersion;
  336. }
  337. }
  338.  
  339. [Serializable]
  340. public class FileVersionAck
  341. {
  342. private FileStatus _fileStatus;
  343. public FileStatus fileStatus
  344. {
  345. get { return _fileStatus; }
  346. }
  347. private Dictionary<int, DateTime> _fileVersions;
  348. public Dictionary<int, DateTime> fileVersions
  349. {
  350. get { return _fileVersions; }
  351. }
  352.  
  353. public FileVersionAck(FileStatus fileStatus)
  354. {
  355. _fileStatus = fileStatus;
  356. _fileVersions = new Dictionary<int, DateTime>();
  357. }
  358.  
  359. public void AddVersion(int versionId, DateTime versionDate)
  360. {
  361. _fileVersions.Add(versionId, versionDate);
  362. }
  363. }
  364.  
  365. [Serializable]
  366. public class SyncStart
  367. {
  368. private int _files_to_sync;
  369. public int files_to_sync { get { return _files_to_sync; } }
  370.  
  371. public SyncStart(int files_to_sync)
  372. {
  373. _files_to_sync = files_to_sync;
  374. }
  375. }
  376.  
  377. [Serializable]
  378. public class SyncEnd
  379. {
  380. private bool _success;
  381. public bool success { get { return _success; } }
  382.  
  383. public SyncEnd(bool success)
  384. {
  385. _success = success;
  386. }
  387. }
  388.  
  389. [Serializable]
  390. public class RestoreFile
  391. {
  392. private int _version;
  393. private string _fullName;
  394.  
  395. public int version { get { return _version; } }
  396. public string fullName { get { return _fullName; } }
  397.  
  398. public RestoreFile(int version, string fullName)
  399. {
  400. _version = version;
  401. _fullName = fullName;
  402. }
  403. }
  404.  
  405. [Serializable]
  406. public class RestoreFileAck
  407. {
  408. private int _size;
  409. public int size { get { return _size; } }
  410.  
  411. public RestoreFileAck(int size)
  412. {
  413. _size = size;
  414. }
  415. }
  416.  
  417. [Serializable]
  418. public class DirectoryVersionGet
  419. {
  420. private string _directoryName;
  421. public string directoryName
  422. {
  423. get { return _directoryName; }
  424. }
  425.  
  426. public DirectoryVersionGet(string directoryName)
  427. {
  428. _directoryName = directoryName;
  429. }
  430. }
  431.  
  432. [Serializable]
  433. public class DirectoryVersionAck
  434. {
  435. private string _directoryName;
  436. public string directoryName
  437. {
  438. get { return _directoryName; }
  439. }
  440.  
  441. private Dictionary<int, List<RestoreFile>> _directoryVersions;
  442. public Dictionary<int, List<RestoreFile>> directoryVersions
  443. {
  444. get { return _directoryVersions; }
  445. }
  446.  
  447. public DirectoryVersionAck(string directoryName, Dictionary<int, List<RestoreFile>> directoryVersions)
  448. {
  449. _directoryName = directoryName;
  450. _directoryVersions = directoryVersions;
  451. }
  452.  
  453. }
  454.  
  455. [Serializable]
  456. public class PullFile
  457. {
  458. private FileStatus _fileStatus;
  459. public FileStatus fileStatus { get { return _fileStatus; } }
  460.  
  461. public PullFile(FileStatus fileStatus)
  462. {
  463. _fileStatus = fileStatus;
  464. }
  465. }
  466.  
  467. [Serializable]
  468. public class PullFileAck
  469. {
  470.  
  471. private int _size;
  472. public int size { get { return _size; } }
  473.  
  474. public PullFileAck(int size)
  475. {
  476. _size = size;
  477. }
  478. }
  479.  
  480.  
  481. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement