public ServerResult Register(RegisterPacketData data) { try { Device newdvc = new Device { DeviceID = data.DeviceID, OSID = (int)data.OSID, URI = data.URI }; Notification_DBDataContext db = new Notification_DBDataContext(); // tìm recceiver Receiver rcv = db.Receivers.Single(r => r.OldID == data.ReceiverOldID); // kiểm tra device đã tồn tại try { Device dvc = db.Devices.Single(dv => dv.DeviceID == data.DeviceID); //thiết bị đã tồn tại thì cập nhật URI cho thiết bị rồi xóa token key dvc.URI = data.URI; } catch (InvalidOperationException) // không tồn tại thiết bị thì add thiết bị mới vào { rcv.Devices.Add(newdvc); } db.SubmitChanges(); return(ServerResult.Success); } catch (InvalidOperationException) {// không tìm thấy receiver return(ServerResult.NotFound); } catch (Exception ex) { OnUnhandledErrorOccurred(ex); return(ServerResult.Error); } }
MyBitConverter <long> _NotifyIDConverter = new MyBitConverter <long>(); // converter dùng để convert byte thành long, số long nhận được chính là notificationID được yêu cầu bởi client #endregion public ClientCommunicator(Params.RawNotificationClientCommunicatorParams param) { _Param = param; server = new TCPServer.TCPServer(_Param.ListenPort); // đăng ký sự kiện nhận được một gói tin từ client server.OnPacketReceived += (s, e) => { FromClientPacket packet = null; try { packet = PacketConverter.BytesToObject(e.Data); } catch { // Bên ngoài gửi gói tin không đúng định dạng, có thể do lỗi đường truyền cũng có thể do ý đồ phá hoại e.RespondToClient(ResultConverter.ObjectToBytes(new FromServerPacket(ServerResult.DataCorrupt, null))); e.CloseConnection(); return; } switch (packet.Type) { case FromClientPacketType.Register: { RegisterPacketData data = packet.Data as RegisterPacketData; e.RespondToClient(ResultConverter.ObjectToBytes(new FromServerPacket(Register(data), null))); e.CloseConnection(); } break; case FromClientPacketType.GetNotificationContent: { GetNotificationContentPacketData data = packet.Data as GetNotificationContentPacketData; ServerResult result; // lấy ra content byte[] content = NotificationContent(data.NotificationID, out result); e.RespondToClient(ResultConverter.ObjectToBytes(new FromServerPacket(result, content))); e.CloseConnection(); } break; } }; }