private void NotifyClient(IDto dto, EventArgs e, string eventName) { //Debug.Assert(_referenceResolver.ResolveReference(dto.DtoGuid) != null, "Null reference notified"); try { if (e is WrappedEventArgs ea && ea.Args is PropertyChangedEventArgs propertyChangedEventArgs && eventName == nameof(INotifyPropertyChanged.PropertyChanged)) { var p = dto.GetType().GetProperty(propertyChangedEventArgs.PropertyName); PropertyChangedValueReader valueReader; if (p?.CanRead == true) { valueReader = new PropertyChangedValueReader(propertyChangedEventArgs.PropertyName, () => p.GetValue(dto, null)); } else { valueReader = new PropertyChangedValueReader(propertyChangedEventArgs.PropertyName, () => null); Debug.WriteLine(dto, $"{GetType()}: Couldn't get value of {propertyChangedEventArgs.PropertyName}"); } Debug.WriteLine($"Server: PropertyChanged {propertyChangedEventArgs.PropertyName} on {dto} sent"); Send(new SocketMessage(valueReader) { MessageType = SocketMessage.SocketMessageType.EventNotification, DtoGuid = dto.DtoGuid, MemberName = eventName, }); } else { Send(new SocketMessage(e) { MessageType = SocketMessage.SocketMessageType.EventNotification, DtoGuid = dto.DtoGuid, MemberName = eventName, }); } }
internal SocketMessage(PropertyChangedValueReader propertyChangedValueReader) { _propertChangedValueReader = propertyChangedValueReader; }