public static GetObserverClassName ( |
||
type | ||
return | string |
private void GenerateObserverCode( Type type, CodeWriter.CodeWriter w, Type[] baseTypes, Tuple <Type, List <Tuple <MethodInfo, string> > >[] typeInfos) { var className = Utility.GetObserverClassName(type); using (w.B($"public class {className}{type.GetGenericParameters()} : InterfacedObserver, {type.GetSymbolDisplay()}{type.GetGenericConstraintClause()}")) { // Constructor using (w.B($"public {className}()", $": base(null, 0)")) { } // Constructor (INotificationChannel) using (w.B($"public {className}(INotificationChannel channel, int observerId = 0)", $": base(channel, observerId)")) { } // Observer method messages foreach (var t in typeInfos) { var payloadTableClassName = Utility.GetPayloadTableClassName(t.Item1) + type.GetGenericParameters(); foreach (var m in t.Item2) { var method = m.Item1; var payloadType = m.Item2; var parameters = method.GetParameters(); var parameterNames = string.Join(", ", parameters.Select(p => p.Name)); var parameterTypeNames = string.Join(", ", parameters.Select(p => (p.GetCustomAttribute <ParamArrayAttribute>() != null ? "params " : "") + p.ParameterType.GetSymbolDisplay(true) + " " + p.Name)); var parameterInits = string.Join(", ", parameters.Select(Utility.GetParameterAssignment)); // Request Methods using (w.B($"public void {method.Name}{method.GetGenericParameters()}({parameterTypeNames}){method.GetGenericConstraintClause()}")) { w._($"var payload = new {payloadTableClassName}.{payloadType}{method.GetGenericParameters()} {{ {parameterInits} }};", $"Notify(payload);"); } } } } // Protobuf-net specialized if (Options.UseProtobuf) { var surrogateClassName = Utility.GetSurrogateClassName(type); w._("[ProtoContract]"); using (w.B($"public class {surrogateClassName}")) { w._("[ProtoMember(1)] public INotificationChannel Channel;"); w._("[ProtoMember(2)] public int ObserverId;"); w._(); w._("[ProtoConverter]"); using (w.B($"public static {surrogateClassName} Convert({type.Name} value)")) { w._($"if (value == null) return null;"); w._($"var o = ({className})value;"); w._($"return new {surrogateClassName} {{ Channel = o.Channel, ObserverId = o.ObserverId }};"); } w._("[ProtoConverter]"); using (w.B($"public static {type.Name} Convert({surrogateClassName} value)")) { w._($"if (value == null) return null;"); w._($"return new {className}(value.Channel, value.ObserverId);"); } } } }