0003-Add-a-default-repository.patch
rsb-cil-test/Program.cs | ||
---|---|---|
79 | 79 | |
80 | 80 |
listener.Deactivate(); |
81 | 81 | |
82 |
Console.WriteLine("\nConverter test:"); |
|
83 | ||
84 |
var defaultInConverters = buildConverterSelection(new List<Tuple<String, IConverter>> { |
|
85 |
new Tuple<string, IConverter>("ascii-string", new StringConverter(false) ), |
|
86 |
new Tuple<string, IConverter>("utf-8-string", new StringConverter(true) ), |
|
87 |
new Tuple<string, IConverter>("int32", new Int32Converter() ), |
|
88 |
new Tuple<string, IConverter>("int64", new Int64Converter() ), |
|
89 |
new Tuple<string, IConverter>("uint32", new UInt32Converter() ), |
|
90 |
new Tuple<string, IConverter>("uint64", new UInt64Converter() ), |
|
91 |
new Tuple<string, IConverter>("float", new FloatConverter() ), |
|
92 |
new Tuple<string, IConverter>("double", new DoubleConverter() ), |
|
93 |
new Tuple<string, IConverter>("bool", new BoolConverter() ), |
|
94 |
new Tuple<string, IConverter>("bytes", new ByteConverter() ), |
|
95 |
new Tuple<string, IConverter>("void", new NullConverter() ), |
|
96 |
new Tuple<string, IConverter>("." + JointAngles.Descriptor.FullName, new ProtocolBufferConverter(JointAngles.Descriptor)) |
|
97 |
}); |
|
98 | ||
99 |
var defaultOutConverters = buildConverterSelection(new List<Tuple<Type, IConverter>> { |
|
100 |
new Tuple<Type, IConverter>(typeof(string), new StringConverter(true) ), |
|
101 |
new Tuple<Type, IConverter>(typeof(int), new Int32Converter() ), |
|
102 |
new Tuple<Type, IConverter>(typeof(long), new Int64Converter() ), |
|
103 |
new Tuple<Type, IConverter>(typeof(uint), new UInt32Converter() ), |
|
104 |
new Tuple<Type, IConverter>(typeof(ulong), new UInt64Converter() ), |
|
105 |
new Tuple<Type, IConverter>(typeof(float), new FloatConverter() ), |
|
106 |
new Tuple<Type, IConverter>(typeof(double), new DoubleConverter() ), |
|
107 |
new Tuple<Type, IConverter>(typeof(bool), new BoolConverter() ), |
|
108 |
new Tuple<Type, IConverter>(typeof(byte[]), new ByteConverter() ), |
|
109 |
new Tuple<Type, IConverter>(typeof(Null), new NullConverter() ), |
|
110 |
new Tuple<Type, IConverter>(typeof(JointAngles), new ProtocolBufferConverter(JointAngles.Descriptor)) |
|
111 |
}); |
|
112 | ||
113 |
Informer repoInformer = new Informer("/test/repo", new OutConnector(new BusClientConnection(host, port), defaultOutConverters)); |
|
114 |
Listener repoListener = new Listener(new InPushConnector(new BusClientConnection(host, port), new Scope("/"), defaultInConverters)); |
|
82 |
Console.WriteLine("\nRepository test:"); |
|
83 | ||
84 |
DefaultConverterRepository.Instance.addConverter(new ProtocolBufferConverter(JointAngles.Descriptor)); |
|
85 | ||
86 |
Informer repoInformer = new Informer("/test/repo", new OutConnector(new BusClientConnection(host, port), DefaultConverterRepository.Instance.SerializationConverterSelector)); |
|
87 |
Listener repoListener = new Listener(new InPushConnector(new BusClientConnection(host, port), new Scope("/"), DefaultConverterRepository.Instance.DeserializationConverterSelector)); |
|
115 | 88 |
repoListener.EventReceived += (e) => { |
116 | 89 |
Console.WriteLine("Event: {0}\nData: {1}", e, e.Data); |
117 | 90 |
}; |
rsb-cil/Rsb/Converter/DefaultConverterRepository.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 | ||
4 |
namespace Rsb.Converter |
|
5 |
{ |
|
6 |
public class DefaultConverterRepository |
|
7 |
{ |
|
8 |
private static readonly DefaultConverterRepository instance = new DefaultConverterRepository(); |
|
9 | ||
10 |
private List<Tuple<PredicateConverterSelection<string>.Predicate, IConverter>> deserializationConverterList = new List<Tuple<PredicateConverterSelection<string>.Predicate, IConverter>>(); |
|
11 |
public PredicateConverterSelection<string> DeserializationConverterSelector { get; private set; } |
|
12 | ||
13 |
private List<Tuple<PredicateConverterSelection<Type>.Predicate, IConverter>> serializationConverterList = new List<Tuple<PredicateConverterSelection<Type>.Predicate, IConverter>>(); |
|
14 |
public PredicateConverterSelection<Type> SerializationConverterSelector { get; private set; } |
|
15 | ||
16 |
private readonly IConverter[] defaultConverter = { |
|
17 |
new NullConverter(), |
|
18 |
new DoubleConverter(), |
|
19 |
new FloatConverter(), |
|
20 |
new Int32Converter(), |
|
21 |
new Int64Converter(), |
|
22 |
new UInt32Converter(), |
|
23 |
new UInt64Converter(), |
|
24 |
new BoolConverter(), |
|
25 |
new StringConverter(false), |
|
26 |
new StringConverter(), |
|
27 |
new ByteConverter(), |
|
28 |
//new ScopeConverter() |
|
29 |
}; |
|
30 |
|
|
31 |
// Explicit static constructor to tell C# compiler |
|
32 |
// not to mark type as beforefieldinit |
|
33 |
static DefaultConverterRepository() |
|
34 |
{ |
|
35 |
} |
|
36 | ||
37 |
private DefaultConverterRepository() |
|
38 |
{ |
|
39 | ||
40 |
foreach (var converter in defaultConverter) { |
|
41 |
ConverterSignature signature = converter.GetSignature(); |
|
42 | ||
43 |
deserializationConverterList.Add( |
|
44 |
new Tuple<PredicateConverterSelection<string>.Predicate, IConverter>( |
|
45 |
new IsExactMatch<string>(signature.Schema), |
|
46 |
converter |
|
47 |
)); |
|
48 |
|
|
49 |
// this will add a second string converter in the informer list. |
|
50 |
// I assume the first one wins and i don't think, that this is intended. Checks and Exceptions should be added at sometime |
|
51 |
|
|
52 |
serializationConverterList.Add( |
|
53 |
new Tuple<PredicateConverterSelection<Type>.Predicate, IConverter>( |
|
54 |
new IsExactMatch<Type>(signature.DataType), |
|
55 |
converter |
|
56 |
)); |
|
57 |
} |
|
58 | ||
59 |
DeserializationConverterSelector = new PredicateConverterSelection<string>(deserializationConverterList); |
|
60 |
SerializationConverterSelector = new PredicateConverterSelection<Type>(serializationConverterList); |
|
61 |
|
|
62 |
} |
|
63 | ||
64 |
public static DefaultConverterRepository Instance |
|
65 |
{ |
|
66 |
get |
|
67 |
{ |
|
68 |
return instance; |
|
69 |
} |
|
70 |
} |
|
71 | ||
72 |
public void addConverter(IConverter converter) { |
|
73 |
deserializationConverterList.Add( |
|
74 |
new Tuple<PredicateConverterSelection<string>.Predicate, IConverter>( |
|
75 |
new IsExactMatch<string>(converter.GetSignature().Schema), |
|
76 |
converter |
|
77 |
)); |
|
78 |
serializationConverterList.Add( |
|
79 |
new Tuple<PredicateConverterSelection<Type>.Predicate, IConverter>( |
|
80 |
new IsExactMatch<Type>(converter.GetSignature().DataType), |
|
81 |
converter |
|
82 |
)); |
|
83 |
} |
|
84 |
} |
|
85 |
} |
rsb-cil/rsb-cil.csproj | ||
---|---|---|
42 | 42 |
<Compile Include="Properties\AssemblyInfo.cs" /> |
43 | 43 |
<Compile Include="Rsb\Converter\ByteConverter.cs" /> |
44 | 44 |
<Compile Include="Rsb\Converter\ConverterSignature.cs" /> |
45 |
<Compile Include="Rsb\Converter\DefaultConverterRepository.cs" /> |
|
45 | 46 |
<Compile Include="Rsb\Converter\DoubleConverter.cs" /> |
46 | 47 |
<Compile Include="Rsb\Converter\FloatConverter.cs" /> |
47 | 48 |
<Compile Include="Rsb\Converter\Int32Converter.cs" /> |
48 |
- |