Advertisement
Guest User

Untitled

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