Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.31 KB | None | 0 0
  1. using System;
  2. using System.Net;
  3. using System.Threading.Tasks;
  4. using MsgPack.Light;
  5. using Tarantool.Client;
  6. using Tarantool.Client.Model;
  7. using Tuple = Tarantool.Client.Model.Tuple;
  8.  
  9. namespace Tarantool.BoxInfo
  10. {
  11. class Program
  12. {
  13. static void Main()
  14. {
  15. try
  16. {
  17. MainAsync().GetAwaiter().GetResult();
  18. }
  19. catch (Exception e)
  20. {
  21. Console.WriteLine(e);
  22. }
  23. Console.ReadKey();
  24. }
  25.  
  26. private static async Task MainAsync()
  27. {
  28. var options = new ConnectionOptions
  29. {
  30. EndPoint = new IPEndPoint(IPAddress.Parse("192.168.99.250"), 3301),
  31. GuestMode = false,
  32. UserName = "admin",
  33. Password = "UGPfnEVbHVM8SscwenWY7LLndP95JEfA"
  34. };
  35. var boxInfoConverter = new BoxInfoConverter();
  36. options.MsgPackContext.RegisterConverter<Replication>(boxInfoConverter);
  37. options.MsgPackContext.RegisterConverter<Server>(boxInfoConverter);
  38. options.MsgPackContext.RegisterConverter<BoxInfo>(boxInfoConverter);
  39. var box = new Box(options);
  40. await box.Connect();
  41.  
  42. // we need an overload without parameter because box.info is parameterless
  43. var result = await box.Call<Tuple, BoxInfo>("box.info", Tuple.Create());
  44. PrintBoxInfo(result.Data[0]);
  45. }
  46.  
  47. private static void PrintBoxInfo(BoxInfo boxInfo)
  48. {
  49. Console.WriteLine("- server:");
  50. Console.WriteLine($" lsn: {boxInfo.Server.Lsn}");
  51. Console.WriteLine($" ro: {boxInfo.Server.ReadOnly}");
  52. Console.WriteLine($" uuid: {boxInfo.Server.UUID}");
  53. Console.WriteLine($" id: {boxInfo.Server.Id}");
  54. Console.WriteLine($" version: {boxInfo.Version}");
  55. Console.WriteLine($" pid: {boxInfo.Pid}");
  56. Console.WriteLine($" status: {boxInfo.Status}");
  57. Console.WriteLine(" replication:");
  58. Console.WriteLine($" status: {boxInfo.Replication.Status}");
  59. Console.WriteLine($" uptime: {boxInfo.Uptime}");
  60. }
  61. }
  62.  
  63. internal class BoxInfo : ITuple
  64. {
  65. public Server Server { get; set; }
  66.  
  67. public string Version { get; set; }
  68.  
  69. public int Pid { get; set; }
  70.  
  71. public string Status { get; set; }
  72.  
  73. public Replication Replication { get; set; }
  74.  
  75. public long Uptime { get; set; }
  76. }
  77.  
  78. internal class Replication
  79. {
  80. public string Status { get; set; }
  81. }
  82.  
  83. internal class Server
  84. {
  85. public long Lsn { get; set; }
  86.  
  87. public bool ReadOnly { get; set; }
  88.  
  89. public string UUID { get; set; }
  90.  
  91. public long Id { get; set; }
  92. }
  93.  
  94. internal class BoxInfoConverter : IMsgPackConverter<BoxInfo>, IMsgPackConverter<Server>, IMsgPackConverter<Replication>
  95. {
  96. private IMsgPackConverter<string> stringConverter;
  97. private IMsgPackConverter<int> intConverter;
  98. private IMsgPackConverter<long> longConverter;
  99. private IMsgPackConverter<bool> boolConverter;
  100.  
  101. public void Initialize(MsgPackContext context)
  102. {
  103. this.stringConverter = context.GetConverter<string>();
  104. context.GetConverter<int[]>();
  105. this.intConverter = context.GetConverter<int>();
  106. this.longConverter = context.GetConverter<long>();
  107. this.boolConverter = context.GetConverter<bool>();
  108. }
  109.  
  110. public void Write(BoxInfo value, IMsgPackWriter writer)
  111. {
  112. throw new NotImplementedException();
  113. }
  114.  
  115. public void Write(Server value, IMsgPackWriter writer)
  116. {
  117. throw new NotImplementedException();
  118. }
  119.  
  120. Server IMsgPackConverter<Server>.Read(IMsgPackReader reader)
  121. {
  122. var length = reader.ReadMapLength();
  123. if (length == null)
  124. return null;
  125.  
  126. var result = new Server();
  127. for (var i = 0; i < length.Value; i++)
  128. {
  129. var key = stringConverter.Read(reader);
  130. switch (key)
  131. {
  132. case "lsn":
  133. result.Lsn = this.longConverter.Read(reader);
  134. break;
  135. case "ro":
  136. result.ReadOnly = this.boolConverter.Read(reader);
  137. break;
  138. case "uuid":
  139. result.UUID = this.stringConverter.Read(reader);
  140. break;
  141. case "id":
  142. result.Id = this.longConverter.Read(reader);
  143. break;
  144. default:
  145. reader.SkipToken();
  146. break;
  147. }
  148. }
  149. return result;
  150. }
  151.  
  152. public void Write(Replication value, IMsgPackWriter writer)
  153. {
  154. throw new NotImplementedException();
  155. }
  156.  
  157. Replication IMsgPackConverter<Replication>.Read(IMsgPackReader reader)
  158. {
  159. var length = reader.ReadMapLength();
  160. if (length == null)
  161. return null;
  162.  
  163. var result = new Replication();
  164. for (var i = 0; i < length.Value; i++)
  165. {
  166. var key = stringConverter.Read(reader);
  167. switch (key)
  168. {
  169. case "status":
  170. result.Status = this.stringConverter.Read(reader);
  171. break;
  172. default:
  173. reader.SkipToken();
  174. break;
  175. }
  176. }
  177. return result;
  178. }
  179.  
  180. BoxInfo IMsgPackConverter<BoxInfo>.Read(IMsgPackReader reader)
  181. {
  182. // some bug is going here, because if response is array, then array reading should be outside of this converter
  183. var length = reader.ReadArrayLength();
  184. if (length != 1)
  185. return null;
  186.  
  187. length = reader.ReadMapLength();
  188. if (length == null)
  189. return null;
  190.  
  191. var result = new BoxInfo();
  192. for (var i = 0; i < length.Value; i++)
  193. {
  194. var key = stringConverter.Read(reader);
  195. switch (key)
  196. {
  197. case "server":
  198. result.Server = ((IMsgPackConverter<Server>) this).Read(reader);
  199. break;
  200. case "version":
  201. result.Version = this.stringConverter.Read(reader);
  202. break;
  203. case "pid":
  204. result.Pid = this.intConverter.Read(reader);
  205. break;
  206. case "status":
  207. result.Status = this.stringConverter.Read(reader);
  208. break;
  209. case "replication":
  210. result.Replication = ((IMsgPackConverter<Replication>) this).Read(reader);
  211. break;
  212. case "uptime":
  213. result.Uptime = this.longConverter.Read(reader);
  214. break;
  215. default:
  216. reader.SkipToken();
  217. break;
  218. }
  219. }
  220. return result;
  221. }
  222. }
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement