在新版本的Beetle.NetPackage中提供了对Protobuf和Controller的支持,所以在WP8下使用Beetle.NetPackage进行基于TCP的数据交互则一件非常简单事情.下面通过组件在WP8下简单实现基于TCP通讯的订单在线查询功能.
协议定义
为了简化交互数据的处理在这里使用Protobuf来描述数据交互,通过Protobuf制订一系列的请求和应答对象来代替平常在TCP下繁琐的数据流处理过程.下面通过Protobuf来描述订单查询的通讯协议.
1 [ProtoContract] 2 public class GetCustomer 3 { 4 [ProtoMember(1)] 5 public string Name { get; set; } 6 } 7 8 [ProtoContract] 9 public class GetCustomerResponse 10 { 11 12 [ProtoMember(1)] 13 public IList<Customer> Items 14 { 15 get; 16 set; 17 } 18 19 } 20 21 [ProtoContract] 22 public class Customer 23 { 24 [ProtoMember(1)] 25 public string ID 26 { 27 get; 28 set; 29 } 30 [ProtoMember(2)] 31 public string Name 32 { 33 get; 34 set; 35 } 36 public override string ToString() 37 { 38 return Name; 39 } 40 } 41 42 [ProtoContract] 43 public class GetEmployee 44 { 45 [ProtoMember(1)] 46 public string Name { get; set; } 47 } 48 49 [ProtoContract] 50 public class GetEmployeeResponse 51 { 52 [ProtoMember(1)] 53 public IList<Employee> Items 54 { 55 get; 56 set; 57 } 58 } 59 60 [ProtoContract] 61 public class Employee 62 { 63 64 [ProtoMember(1)] 65 public string ID 66 { 67 get; 68 set; 69 } 70 [ProtoMember(2)] 71 public string Name 72 { 73 get; 74 set; 75 } 76 public override string ToString() 77 { 78 return Name; 79 } 80 81 } 82 83 [ProtoContract] 84 public class OrderSearch 85 { 86 [ProtoMember(1)] 87 public string Employee { get; set; } 88 [ProtoMember(2)] 89 public int PageIndex { get; set; } 90 [ProtoMember(3)] 91 public string Customer { get; set; } 92 [ProtoMember(4)] 93 public string FromDate { get; set; } 94 [ProtoMember(5)] 95 public string ToDate { get; set; } 96 } 97 98 [ProtoContract] 99 public class OrderSearchResponse 100 { 101 [ProtoMember(1)] 102 public IList<Order> Items 103 { 104 get; 105 set; 106 } 107 [ProtoMember(2)] 108 public int PageIndex 109 { 110 get; 111 set; 112 } 113 [ProtoMember(3)] 114 public int Pages 115 { 116 get; 117 set; 118 } 119 } 120 121 [ProtoContract] 122 public class Order 123 { 124 [ProtoMember(1)] 125 public string OrderID { get; set; } 126 [ProtoMember(2)] 127 public string Employee { get; set; } 128 [ProtoMember(3)] 129 public string Customer { get; set; } 130 [ProtoMember(4)] 131 public string OrderDate { get; set; } 132 [ProtoMember(5)] 133 public string RequiredDate { get; set; } 134 [ProtoMember(6)] 135 public string ShippedDate { get; set; } 136 [ProtoMember(7)] 137 public string ShipName { get; set; } 138 [ProtoMember(8)] 139 public string ShipAddress { get; set; } 140 [ProtoMember(9)] 141 public string ShipCity { get; set; } 142 [ProtoMember(10)] 143 public string ShipRegion { get; set; } 144 } 145 146 [ProtoContract] 147 public class GetOrderDetail 148 { 149 [ProtoMember(1)] 150 public string OrderID { get; set; } 151 } 152 153 [ProtoContract] 154 public class GetOrderDetailResponse 155 { 156 [ProtoMember(1)] 157 public IList<OrderDetail> Items 158 { 159 get; 160 set; 161 } 162 } 163 164 [ProtoContract] 165 public class OrderDetail 166 { 167 [ProtoMember(1)] 168 public string OrderID { get; set; } 169 [ProtoMember(2)] 170 public string Product { get; set; } 171 [ProtoMember(3)] 172 public double UnitPrice { get; set; } 173 [ProtoMember(4)] 174 public int Quantity { get; set; } 175 [ProtoMember(5)] 176 public float Discount { get; set; } 177 }