[REEF-1859] Support Avro code generation of multiple C# files from single avsc.
* This task modifies the code generation task to support generating
multiple C# program files from a single avsc file that has multiple
parallel and nested types.
* Adds the bridge message wrapper avsc file that code gens to four C# files
and provides the framework for the bridge Java/CLR Avro protocol.
JIRA:
[REEF-1859](https://issues.apache.org/jira/browse/REEF-1859)
Pull request:
This closes #1359
diff --git a/lang/common/bridge/avro/Acknowledgement.avsc b/lang/common/bridge/avro/Acknowledgement.avsc
deleted file mode 100644
index 31c9e53..0000000
--- a/lang/common/bridge/avro/Acknowledgement.avsc
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-[
- /*
- * Acknowledgement that a specific message was received and processed.
- */
- {
- "namespace":"org.apache.reef.bridge.message",
- "type":"record",
- "name":"Acknowledgement",
- "doc":"The Acknowledgement message is sent to the Java bridge to acknowledge receipt and processing of a specific message.",
- "fields":[
- {
- "name":"messageIdentifier",
- "type":"long",
- "doc":"The message identifier of the message that was successfully processed."
- }
- ]
- }
-]
diff --git a/lang/common/bridge/avro/BridgeInterop.avsc b/lang/common/bridge/avro/BridgeInterop.avsc
new file mode 100644
index 0000000..357191a
--- /dev/null
+++ b/lang/common/bridge/avro/BridgeInterop.avsc
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+[
+ /*
+ * Message protocol for the Java/C# bridge communications.
+ */
+ { "type": "record", "name": "SetupBridge", "namespace": "org.apache.reef.bridge.message",
+ "doc": "Notify the C# bridge of the http port of the Java bridge webserver.",
+ "fields":
+ [
+ { "name": "httpServerPortNumber", "type": "int", "doc": "The Java bridge http server port number." }
+ ]
+ },
+ { "type": "record", "name": "SystemOnStart", "namespace": "org.apache.reef.bridge.message",
+ "doc": "Notify the C# bridge the system is now running.",
+ "fields":
+ [
+ { "name": "dateTime", "type": "long", "doc": "Date time in seconds as a long since January 1, 1970" }
+ ]
+ },
+ { "type":"record", "name":"Acknowledgement", "namespace":"org.apache.reef.bridge.message",
+ "doc":"The Acknowledgement message is sent to the Java bridge to acknowledge receipt and processing of a specific message.",
+ "fields":[
+ {
+ "name":"messageIdentifier",
+ "type":"long",
+ "doc":"The message identifier of the message that was successfully processed."
+ }
+ ]
+ },
+ { "type": "record", "name":"BridgeInterop", "namespace": "org.apache.reef.bridge.message",
+ "doc": "Container message for all Java/CLR bridge messages in the protocol.",
+ "fields": [
+ { "name": "sequence", "type": "long", "doc": "The unique squence identifier of the message in the protocol stream." },
+ { "name": "messageType", "type":
+ { "type": "enum", "name": "MessageType",
+ "doc": "An enumeration of all possible Java/C# bridge protocol messages.",
+ "symbols":
+ [
+ "SetupBridge",
+ "SystemOnStart",
+ "Acknowledgement"
+ ]
+ },
+ "doc": "The type of the bridge Java/CLR interop message." },
+ { "name": "message",
+ "doc": "A union which contains the actual message.",
+ "type":
+ [
+ "SetupBridge",
+ "SystemOnStart",
+ "Acknowledgement",
+ { "type": "array", "items": "bytes"}
+ ]
+ }
+ ]
+ }
+]
diff --git a/lang/common/bridge/avro/Header.avsc b/lang/common/bridge/avro/Header.avsc
deleted file mode 100644
index c543f0b..0000000
--- a/lang/common/bridge/avro/Header.avsc
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-[
- /*
- * Identify the next message in the Java/C# bridge protocol.
- */
- {
- "namespace":"org.apache.reef.bridge.message",
- "type":"record",
- "name":"Header",
- "doc":"Identifies the following message in the Java/C# bridge protocol.",
- "fields":[
- {
- "name":"identifier",
- "doc":"Identifier of the next message to be read.",
- "type":"long"
- },
- {
- "name":"className",
- "doc":"The fully qualified name of the message class.",
- "type":"string"
- }
- ]
- }
-]
diff --git a/lang/common/bridge/avro/SystemOnStart.avsc b/lang/common/bridge/avro/SystemOnStart.avsc
deleted file mode 100644
index 8f25fa1..0000000
--- a/lang/common/bridge/avro/SystemOnStart.avsc
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-[
- /*
- * First message from the Java bridge to the CLR bridge.
- */
- {
- "namespace":"org.apache.reef.bridge.message",
- "type":"record",
- "name":"SystemOnStart",
- "doc":"The SystemOnStart message is sent to the CLR bridge from the Java bridge when the round trip communication path has been established.",
- "fields":[
- {
- "name":"dateTime",
- "type":"long",
- "doc":"Date time in seconds as a long since January 1, 1970"
- }
- ]
- }
-]
diff --git a/lang/cs/AvroCodeGeneration.targets b/lang/cs/AvroCodeGeneration.targets
index c6599b2..c753ac3 100644
--- a/lang/cs/AvroCodeGeneration.targets
+++ b/lang/cs/AvroCodeGeneration.targets
@@ -14,8 +14,8 @@
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
--->
-<!-- AVRO CODE GERNATION TARGETS FOR MSBUILD -->
+-->
+<!-- AVRO CODE GERNATION TARGETS FOR MSBUILD -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="AvscToCSharp" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
@@ -39,19 +39,19 @@
// every message defined in the Messages directory.
// Create a temporary working directory.
- String tempDir = Path.GetFullPath(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));
+ string tempDir = Path.GetFullPath(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));
Directory.CreateDirectory(tempDir);
- String[] sourceFiles = SourceFileList.Split(new char[]{';'});
+ string[] sourceFiles = SourceFileList.Split(new char[]{';'});
// Get the full path where the avro avsc files are located.
- String messageDirectory = Path.GetFullPath(AvroSchemaDirectory);
+ string messageDirectory = Path.GetFullPath(AvroSchemaDirectory);
// Add the avro tools directory to the path.
- String path = Environment.GetEnvironmentVariable("path");
+ string path = Environment.GetEnvironmentVariable("path");
path = Path.GetFullPath(AvroBinaryDirectory) + ";" + path;
Environment.SetEnvironmentVariable("path", path);
- String copyright = String.Join(Environment.NewLine,
+ string copyright = string.Join(Environment.NewLine,
"// Licensed to the Apache Software Foundation (ASF) under one",
"// or more contributor license agreements. See the NOTICE file",
"// distributed with this work for additional information",
@@ -75,6 +75,7 @@
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
+ CreateNoWindow = true,
FileName = "Microsoft.Avro.Tools.exe"
};
@@ -82,41 +83,56 @@
bool conversionError = false;
using (StreamWriter logWriter = new StreamWriter(Path.Combine(tempDir, "avroout.log")))
{
- logWriter.WriteLine(Environment.GetEnvironmentVariable("path"));
- foreach (String file in sourceFiles)
+ foreach (string file in sourceFiles)
{
if (file.Contains(@"Message\"))
{
// Build the name of the source avsc file from the destiname CS file and avro message path.
- String avroSourceName = Path.Combine(messageDirectory, (Path.GetFileName(file)).Replace(".cs", ".avsc"));
+ string avroSourceName = Path.Combine(messageDirectory, (Path.GetFileName(file)).Replace(".cs", ".avsc"));
rProcInfo.Arguments = String.Format(" CodeGen /I:{0} /O:{1}", avroSourceName, tempDir);
logWriter.Write(rProcInfo.FileName);
logWriter.WriteLine(rProcInfo.Arguments);
- StringBuilder stdOutBuilder = new StringBuilder();
- StringBuilder stdErrBuilder = new StringBuilder();
-
- // Start the conversion process
- using (Process rProc = Process.Start(rProcInfo))
+ // Check for for a matching file in the avsc directory.
+ // This may not be the case when a single avsc file
+ // defines multiple types.
+ if (File.Exists(avroSourceName))
{
- stdOutBuilder.Append(rProc.StandardOutput.ReadToEnd());
- stdErrBuilder.Append(rProc.StandardError.ReadToEnd());
- rProc.WaitForExit();
- if (rProc.ExitCode != 0)
- {
- conversionError = true;
- }
- }
- logWriter.WriteLine(stdOutBuilder.ToString());
- logWriter.WriteLine(stdErrBuilder.ToString());
+ StringBuilder stdOutBuilder = new StringBuilder();
+ StringBuilder stdErrBuilder = new StringBuilder();
- using (StreamReader tmpReader = new StreamReader(Path.Combine(tempDir, Path.GetFileName(file))))
- {
- String source = tmpReader.ReadToEnd();
- using (StreamWriter destWriter = new StreamWriter(Path.GetFullPath(file)))
+ // Start the conversion process
+ using (Process rProc = Process.Start(rProcInfo))
{
- destWriter.WriteLine(copyright);
- destWriter.Write(source);
+ stdOutBuilder.Append(rProc.StandardOutput.ReadToEnd());
+ stdErrBuilder.Append(rProc.StandardError.ReadToEnd());
+ rProc.WaitForExit();
+ if (rProc.ExitCode != 0)
+ {
+ conversionError = true;
+ }
+ }
+ logWriter.WriteLine(stdOutBuilder.ToString());
+ logWriter.WriteLine(stdErrBuilder.ToString());
+
+ if (!conversionError)
+ {
+ // Get all of the generated C# files and copy to destination with copyright.
+ var genFiles = Directory.EnumerateFiles(tempDir, "*.cs");
+ foreach (string genFile in genFiles)
+ {
+ logWriter.WriteLine("Processing file {0}", genFile);
+ using (StreamReader tmpReader = new StreamReader(genFile))
+ {
+ using (StreamWriter destWriter =
+ new StreamWriter(Path.Combine(Path.GetDirectoryName(file), Path.GetFileName(genFile))))
+ {
+ destWriter.WriteLine(copyright);
+ destWriter.Write(tmpReader.ReadToEnd());
+ }
+ }
+ File.Delete(genFile);
+ }
}
}
}
@@ -140,5 +156,3 @@
<AvscToCSharp ProjectDirectory="$(ProjectDir)" SourceFileList="@(Compile)" AvroSchemaDirectory="$(AvroSchemaDirectory)" AvroBinaryDirectory="$(AvroBinaryDirectory)" />
</Target>
</Project>
-
-
diff --git a/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/BridgeInterop.cs b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/BridgeInterop.cs
new file mode 100644
index 0000000..2e862a7
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/BridgeInterop.cs
@@ -0,0 +1,83 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//<auto-generated />
+namespace org.apache.reef.bridge.message
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Runtime.Serialization;
+ using Microsoft.Hadoop.Avro;
+
+ /// <summary>
+ /// Used to serialize and deserialize Avro record org.apache.reef.bridge.message.BridgeInterop.
+ /// </summary>
+ [DataContract(Namespace = "org.apache.reef.bridge.message")]
+ public partial class BridgeInterop
+ {
+ private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.bridge.message.BridgeInterop"",""doc"":""Container message for all Java/CLR bridge messages in the protocol."",""fields"":[{""name"":""sequence"",""doc"":""The unique squence identifier of the message in the protocol stream."",""type"":""long""},{""name"":""messageType"",""doc"":""The type of the bridge Java/CLR interop message."",""type"":{""type"":""enum"",""name"":""org.apache.reef.bridge.message.MessageType"",""doc"":""An enumeration of all possible Java/C# bridge protocol messages."",""symbols"":[""SetupBridge"",""SystemOnStart"",""Acknowledgement""]}},{""name"":""message"",""doc"":""A union which contains the actual message."",""type"":[{""type"":""record"",""name"":""org.apache.reef.bridge.message.SetupBridge"",""doc"":""Notify the C# bridge of the http port of the Java bridge webserver."",""fields"":[{""name"":""httpServerPortNumber"",""doc"":""The Java bridge http server port number."",""type"":""int""}]},{""type"":""record"",""name"":""org.apache.reef.bridge.message.SystemOnStart"",""doc"":""Notify the C# bridge the system is now running."",""fields"":[{""name"":""dateTime"",""doc"":""Date time in seconds as a long since January 1, 1970"",""type"":""long""}]},{""type"":""record"",""name"":""org.apache.reef.bridge.message.Acknowledgement"",""doc"":""The Acknowledgement message is sent to the Java bridge to acknowledge receipt and processing of a specific message."",""fields"":[{""name"":""messageIdentifier"",""doc"":""The message identifier of the message that was successfully processed."",""type"":""long""}]},{""type"":""array"",""items"":""bytes""}]}]}";
+
+ /// <summary>
+ /// Gets the schema.
+ /// </summary>
+ public static string Schema
+ {
+ get
+ {
+ return JsonSchema;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the sequence field.
+ /// </summary>
+ [DataMember]
+ public long sequence { get; set; }
+
+ /// <summary>
+ /// Gets or sets the messageType field.
+ /// </summary>
+ [DataMember]
+ public org.apache.reef.bridge.message.MessageType messageType { get; set; }
+
+ /// <summary>
+ /// Gets or sets the message field.
+ /// </summary>
+ [DataMember]
+ [AvroUnion(typeof(org.apache.reef.bridge.message.SetupBridge), typeof(org.apache.reef.bridge.message.SystemOnStart), typeof(org.apache.reef.bridge.message.Acknowledgement), typeof(List<byte[]>))]
+ public object message { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BridgeInterop"/> class.
+ /// </summary>
+ public BridgeInterop()
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BridgeInterop"/> class.
+ /// </summary>
+ /// <param name="sequence">The sequence.</param>
+ /// <param name="messageType">The messageType.</param>
+ /// <param name="message">The message.</param>
+ public BridgeInterop(long sequence, org.apache.reef.bridge.message.MessageType messageType, object message)
+ {
+ this.sequence = sequence;
+ this.messageType = messageType;
+ this.message = message;
+ }
+ }
+}
diff --git a/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/MessageType.cs b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/MessageType.cs
new file mode 100644
index 0000000..be59777
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/MessageType.cs
@@ -0,0 +1,47 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//<auto-generated />
+namespace org.apache.reef.bridge.message
+{
+ using System.Runtime.Serialization;
+
+ /// <summary>
+ /// Used to serialize and deserialize Avro enum org.apache.reef.bridge.message.MessageType.
+ /// </summary>
+ [DataContract(Namespace = "org.apache.reef.bridge.message")]
+ public enum MessageType
+ {
+ /// <summary>
+ /// The SetupBridge symbol.
+ /// </summary>
+ [EnumMember]
+ SetupBridge,
+
+ /// <summary>
+ /// The SystemOnStart symbol.
+ /// </summary>
+ [EnumMember]
+ SystemOnStart,
+
+ /// <summary>
+ /// The Acknowledgement symbol.
+ /// </summary>
+ [EnumMember]
+ Acknowledgement,
+
+ }
+}
\ No newline at end of file
diff --git a/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/SetupBridge.cs b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/SetupBridge.cs
new file mode 100644
index 0000000..0694d49
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/SetupBridge.cs
@@ -0,0 +1,66 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//<auto-generated />
+namespace org.apache.reef.bridge.message
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Runtime.Serialization;
+ using Microsoft.Hadoop.Avro;
+
+ /// <summary>
+ /// Used to serialize and deserialize Avro record org.apache.reef.bridge.message.SetupBridge.
+ /// </summary>
+ [DataContract(Namespace = "org.apache.reef.bridge.message")]
+ public partial class SetupBridge
+ {
+ private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.bridge.message.SetupBridge"",""doc"":""Notify the C# bridge of the http port of the Java bridge webserver."",""fields"":[{""name"":""httpServerPortNumber"",""doc"":""The Java bridge http server port number."",""type"":""int""}]}";
+
+ /// <summary>
+ /// Gets the schema.
+ /// </summary>
+ public static string Schema
+ {
+ get
+ {
+ return JsonSchema;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the httpServerPortNumber field.
+ /// </summary>
+ [DataMember]
+ public int httpServerPortNumber { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SetupBridge"/> class.
+ /// </summary>
+ public SetupBridge()
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SetupBridge"/> class.
+ /// </summary>
+ /// <param name="httpServerPortNumber">The httpServerPortNumber.</param>
+ public SetupBridge(int httpServerPortNumber)
+ {
+ this.httpServerPortNumber = httpServerPortNumber;
+ }
+ }
+}
diff --git a/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/SystemOnStart.cs b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/SystemOnStart.cs
index b066679..a719017 100644
--- a/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/SystemOnStart.cs
+++ b/lang/cs/Org.Apache.REEF.Bridge.CLR/Message/SystemOnStart.cs
@@ -28,7 +28,7 @@
[DataContract(Namespace = "org.apache.reef.bridge.message")]
public partial class SystemOnStart
{
- private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.bridge.message.SystemOnStart"",""doc"":""The SystemOnStart message is sent to the CLR bridge from the Java bridge when the round trip communication path has been established."",""fields"":[{""name"":""dateTime"",""doc"":""Date time in seconds as a long since January 1, 1970"",""type"":""long""}]}";
+ private const string JsonSchema = @"{""type"":""record"",""name"":""org.apache.reef.bridge.message.SystemOnStart"",""doc"":""Notify the C# bridge the system is now running."",""fields"":[{""name"":""dateTime"",""doc"":""Date time in seconds as a long since January 1, 1970"",""type"":""long""}]}";
/// <summary>
/// Gets the schema.
diff --git a/lang/cs/Org.Apache.REEF.Bridge.CLR/Org.Apache.REEF.Bridge.CLR.csproj b/lang/cs/Org.Apache.REEF.Bridge.CLR/Org.Apache.REEF.Bridge.CLR.csproj
index fca5894..dbbe571 100644
--- a/lang/cs/Org.Apache.REEF.Bridge.CLR/Org.Apache.REEF.Bridge.CLR.csproj
+++ b/lang/cs/Org.Apache.REEF.Bridge.CLR/Org.Apache.REEF.Bridge.CLR.csproj
@@ -54,7 +54,10 @@
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Message\Acknowledgement.cs" />
+ <Compile Include="Message\BridgeInterop.cs" />
+ <Compile Include="Message\MessageType.cs" />
<Compile Include="Message\Protocol.cs" />
+ <Compile Include="Message\SetupBridge.cs" />
<Compile Include="Message\SystemOnStart.cs" />
</ItemGroup>
<ItemGroup>