Changeset 13924
- Timestamp:
- 06/19/16 23:32:37 (9 years ago)
- Location:
- branches/thasling/DistributedGA
- Files:
-
- 1 deleted
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/thasling/DistributedGA/DistributedGA.ContactServer.Host/Program.cs
r13887 r13924 2 2 using System.ServiceModel; 3 3 4 namespace DistributedGA.ContactServer.Host 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 string baseAddress = string.Empty; 11 if (args.GetUpperBound(0) > -1) 12 { 13 baseAddress = args[0]; 14 } 15 if (string.IsNullOrWhiteSpace(baseAddress)) 16 { 17 baseAddress = "net.tcp://localhost:9090/DistributedGA.ContactServer/ContactService"; 18 } 19 using (ServiceHost host = new ServiceHost(typeof(ContactServiceImpl), new Uri[] { new Uri(baseAddress) })) 20 { 21 // Enable metadata publishing. 4 namespace DistributedGA.ContactServer.Host { 5 class Program { 6 static void Main(string[] args) { 7 string baseAddress = string.Empty; 8 if (args.GetUpperBound(0) > -1) { 9 baseAddress = args[0]; 10 } 11 if (string.IsNullOrWhiteSpace(baseAddress)) { 12 baseAddress = "net.tcp://localhost:9090/DistributedGA.ContactServer/ContactService"; 13 } 14 using (ServiceHost host = new ServiceHost(typeof(ContactServiceImpl), new Uri[] { new Uri(baseAddress) })) { 15 // Enable metadata publishing. 22 16 23 17 24 25 26 27 18 // Open the ServiceHost to start listening for messages. Since 19 // no endpoints are explicitly configured, the runtime will create 20 // one endpoint per base address for each service contract implemented 21 // by the service. 28 22 29 23 host.Open(); 30 24 31 32 33 25 Console.WriteLine("The service is ready at {0}", baseAddress); 26 Console.WriteLine("Press <Enter> to stop the service."); 27 Console.ReadLine(); 34 28 35 // Close the ServiceHost. 36 host.Close(); 37 } 38 } 29 // Close the ServiceHost. 30 host.Close(); 31 } 39 32 } 33 } 40 34 } -
branches/thasling/DistributedGA/DistributedGA.ContactServer/ContactServiceImpl.cs
r13918 r13924 30 30 try { 31 31 UpdateHeartbeat(source); 32 } catch (Exception ex) { 32 } 33 catch (Exception ex) { 33 34 AddError("ContactServiceImpl.RegisterPeer", ex); 34 35 } … … 46 47 return false; 47 48 }).ToList(); 48 } catch (Exception ex) { 49 } 50 catch (Exception ex) { 49 51 AddError("ContactServiceImpl.GetPeerList", ex); 50 52 return null; … … 58 60 File.AppendAllText("Log.txt", string.Concat(source.IpAddress, ":", source.Port, ",", source.ProblemInstance, ",", msg, Environment.NewLine)); 59 61 } 60 } catch (Exception ex) { 62 } 63 catch (Exception ex) { 61 64 //Nothing to do because maybe called from adderror 62 65 } … … 68 71 DateTime now = DateTime.Now; 69 72 allPeers.AddOrUpdate(source, now, (k, v) => v = now); 70 } catch (Exception ex) { 73 } 74 catch (Exception ex) { 71 75 AddError("ContactServiceImpl.UpdateHeartbeat", ex); 72 76 } -
branches/thasling/DistributedGA/DistributedGA.ContactServer/IContactService.cs
r13887 r13924 7 7 using System.Threading.Tasks; 8 8 9 namespace DistributedGA.ContactServer 10 { 11 [ServiceContract] 12 public interface IContactService 13 { 14 [OperationContract] 15 void RegisterPeer(PeerInfo source); //Registers own instance at the contact-server 9 namespace DistributedGA.ContactServer { 10 [ServiceContract] 11 public interface IContactService { 12 [OperationContract] 13 void RegisterPeer(PeerInfo source); //Registers own instance at the contact-server 16 14 17 18 15 [OperationContract] 16 List<PeerInfo> GetPeerList(PeerInfo source); //Recieves all peers in the network from contact-server 19 17 20 21 18 [OperationContract] 19 void UpdateHeartbeat(PeerInfo source); //Sends heartbeat to contact-server 22 20 23 24 21 [OperationContract] 22 void MakeLog(PeerInfo source, string msg); //Used to log all peers at a single location 25 23 26 24 } 27 25 } -
branches/thasling/DistributedGA/DistributedGA.Core/Domain/MessageRecieveEventArgs.cs
r13887 r13924 1 1 using System; 2 2 3 namespace DistributedGA.Core.Domain 4 { 5 public class MessageRecieveEventArgs : EventArgs 6 { 7 public int val; 8 public byte[][] data { get; set; } 9 public PeerInfo Sender { get; set; } 10 } 3 namespace DistributedGA.Core.Domain { 4 public class MessageRecieveEventArgs : EventArgs { 5 public int val; 6 public byte[][] data { get; set; } 7 public PeerInfo Sender { get; set; } 8 } 11 9 } -
branches/thasling/DistributedGA/DistributedGA.Core/Domain/PeerInfo.cs
r13524 r13924 5 5 using System.Threading.Tasks; 6 6 7 namespace DistributedGA.Core.Domain 8 { 9 //containts contact information of one peer 10 public class PeerInfo 11 { 12 public int Port { get; set; } 13 public string IpAddress { get; set; } 14 public string ProblemInstance { get; set; } 7 namespace DistributedGA.Core.Domain { 8 //containts contact information of one peer 9 public class PeerInfo { 10 public int Port { get; set; } 11 public string IpAddress { get; set; } 12 public string ProblemInstance { get; set; } 15 13 16 public override bool Equals(System.Object obj) 17 { 18 if (obj == null) 19 { 20 return false; 21 } 14 public override bool Equals(System.Object obj) { 15 if (obj == null) { 16 return false; 17 } 22 18 23 PeerInfo p = obj as PeerInfo; 24 if ((System.Object)p == null) 25 { 26 return false; 27 } 19 PeerInfo p = obj as PeerInfo; 20 if ((System.Object)p == null) { 21 return false; 22 } 28 23 29 return p.Port.Equals(this.Port) && p.IpAddress.Equals(this.IpAddress); 30 } 31 public override int GetHashCode() 32 { 33 return this.IpAddress.GetHashCode(); 34 } 24 return p.Port.Equals(this.Port) && p.IpAddress.Equals(this.IpAddress); 35 25 } 26 public override int GetHashCode() { 27 return this.IpAddress.GetHashCode(); 28 } 29 } 36 30 } -
branches/thasling/DistributedGA/DistributedGA.Core/Implementation/MessageContractImpl.cs
r13887 r13924 4 4 using DistributedGA.Core.Interface; 5 5 6 namespace DistributedGA.Core.Implementation 7 { 8 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 9 public class MessageContractImpl : IMessageContract 10 { 11 public void SendData(PeerInfo sender, byte[][] data) 12 { 13 MessageRecieveEventArgs args = new MessageRecieveEventArgs() { Sender = sender, data = data }; 6 namespace DistributedGA.Core.Implementation { 7 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 8 public class MessageContractImpl : IMessageContract { 9 public void SendData(PeerInfo sender, byte[][] data) { 10 MessageRecieveEventArgs args = new MessageRecieveEventArgs() { Sender = sender, data = data }; 14 11 15 if (MessageRecieved != null) 16 { 17 MessageRecieved(this, args); 18 } 19 } 12 if (MessageRecieved != null) { 13 MessageRecieved(this, args); 14 } 15 } 20 16 21 17 public event EventHandler<MessageRecieveEventArgs> MessageRecieved; 22 18 23 19 } 24 20 } -
branches/thasling/DistributedGA/DistributedGA.Core/Implementation/PeerNetworkMessageHandler.cs
r13918 r13924 7 7 using DistributedGA.Core.Interface; 8 8 9 namespace DistributedGA.Core.Implementation 10 { 11 public class PeerNetworkMessageHandler : IMessageHandler 12 { 13 //own peer-instance Information 14 private PeerInfo ownInstance = null; 9 namespace DistributedGA.Core.Implementation { 10 public class PeerNetworkMessageHandler : IMessageHandler { 11 //own peer-instance Information 12 private PeerInfo ownInstance = null; 15 13 16 17 14 //uses peer-list from IPeerListManager to decide which peers to contact 15 private IPeerListManager peerListManager; 18 16 19 20 17 //uses IMessageSender to send populations to peers 18 private IMessageSender sender = null; 21 19 22 23 24 25 26 20 //provides current population for the higher layer IMigrationOperator 21 //to queues are used to gather and and provide population more efficiently 22 private object activeQueueLocker = new object(); 23 private ConcurrentQueue<byte[]> writeQueue; 24 private ConcurrentQueue<byte[]> readQueue; 27 25 28 29 26 //uses IMessageService for recieving population from one peer at once 27 private IMessageService host = null; 30 28 31 29 32 30 33 public void Init(string lanIpPrefix, string contactServerUrl) 34 { 35 try 36 { 37 ownInstance = new PeerInfo() 38 { 39 IpAddress = GetInternalIpAddress(lanIpPrefix), 40 Port = 0, 41 ProblemInstance = "TestProblem" 42 }; // TODO: get own peerinfo 31 public void Init(string lanIpPrefix, string contactServerUrl) { 32 try { 33 ownInstance = new PeerInfo() { 34 IpAddress = GetInternalIpAddress(lanIpPrefix), 35 Port = 0, 36 ProblemInstance = "TestProblem" 37 }; // TODO: get own peerinfo 43 38 44 45 39 writeQueue = new ConcurrentQueue<byte[]>(); 40 readQueue = new ConcurrentQueue<byte[]>(); 46 41 47 42 48 49 50 43 host = new WcfMessageService(); 44 ownInstance.Port = host.Init(ownInstance.IpAddress); //getting port, on which service is hostet 45 host.OnDataRecieved += new EventHandler<MessageRecieveEventArgs>(OnPopulationRecieved); 51 46 52 53 47 peerListManager = new WcfPeerListManager(); 48 peerListManager.Init(ownInstance, contactServerUrl); 54 49 55 56 50 sender = new WcfMessageSender(); 51 sender.Init(ownInstance); 57 52 58 } 59 catch (Exception ex) 60 { 61 AddError("PeerNetworkMessageHandler.Init", ex); 62 } 53 } 54 catch (Exception ex) { 55 AddError("PeerNetworkMessageHandler.Init", ex); 56 } 57 } 58 59 public void Dispose() { 60 try { 61 host.Dispose(); 62 sender.Dispose(); 63 peerListManager.Dispose(); 64 } 65 catch (Exception ex) { 66 AddError("PeerNetworkMessageHandler.Dispose", ex); 67 } 68 } 69 70 public void PublishDataToNetwork(byte[][] data) { 71 try { 72 foreach (PeerInfo peer in peerListManager.GetPeerList()) { 73 //maybe something will go wrong during network communication... 74 try { 75 sender.SendData(peer, data); 76 } 77 catch (Exception ex) { 78 AddError("PeerNetworkMessageHandler.PublishDataToNetwork(during sending to one peer!)", ex); 79 } 80 } 81 } 82 catch (Exception ex) { 83 AddError("PeerNetworkMessageHandler.PublishDataToNetwork", ex); 84 } 85 } 86 87 public byte[][] GetDataFromNetwork() { 88 try { 89 List<byte[]> res = new List<byte[]>(); 90 byte[] item = null; 91 lock (activeQueueLocker) { 92 var tmp = readQueue; 93 readQueue = writeQueue; 94 writeQueue = tmp; 63 95 } 64 96 65 public void Dispose() 66 { 67 try 68 { 69 host.Dispose(); 70 sender.Dispose(); 71 peerListManager.Dispose(); 72 } 73 catch (Exception ex) 74 { 75 AddError("PeerNetworkMessageHandler.Dispose", ex); 76 } 97 //creating resultset 98 while (!readQueue.IsEmpty) { 99 if (readQueue.TryDequeue(out item)) { 100 res.Add(item); 101 } 77 102 } 103 return res.ToArray(); 104 } 105 catch (Exception ex) { 106 AddError("PeerNetworkMessageHandler.GetDataFromNetwork", ex); 107 return null; 108 } 109 } 78 110 79 public void PublishDataToNetwork(byte[][] data) 80 { 81 try 82 { 83 foreach (PeerInfo peer in peerListManager.GetPeerList()) 84 { 85 //maybe something will go wrong during network communication... 86 try 87 { 88 sender.SendData(peer, data); 89 } 90 catch (Exception ex) 91 { 92 AddError("PeerNetworkMessageHandler.PublishDataToNetwork(during sending to one peer!)", ex); 93 } 94 } 95 } 96 catch (Exception ex) 97 { 98 AddError("PeerNetworkMessageHandler.PublishDataToNetwork", ex); 99 } 111 public PeerInfo GetPeerInfo() { 112 return ownInstance; 113 } 114 115 public List<PeerInfo> GetCurrentNetwork() { 116 return peerListManager.GetPeerList(); 117 } 118 119 private string GetInternalIpAddress(string ipPrefix) { 120 try { 121 var strHostName = Dns.GetHostName(); 122 // Then using host name, get the IP address list.. 123 IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 124 IPAddress[] addr = ipEntry.AddressList; 125 126 return addr 127 .Select(ip => ip.ToString()) 128 .First(str => str.StartsWith(ipPrefix)); 129 } 130 catch { return null; } 131 } 132 133 private void OnPopulationRecieved(object sender, MessageRecieveEventArgs e) { 134 if (e != null) { 135 lock (activeQueueLocker) { 136 foreach (byte[] item in e.data) { 137 writeQueue.Enqueue(item); 138 } 100 139 } 140 } 141 } 101 142 102 public byte[][] GetDataFromNetwork() 103 { 104 try 105 { 106 List<byte[]> res = new List<byte[]>(); 107 byte[] item = null; 108 lock (activeQueueLocker) 109 { 110 var tmp = readQueue; 111 readQueue = writeQueue; 112 writeQueue = tmp; 113 } 143 private void AddError(string source, Exception ex) { 144 if (peerListManager != null) { 145 try { 146 peerListManager.SendLogToServer(string.Concat("Source: ", source, ", Exception: ", ex.Message)); 147 } 148 catch { } 149 } 150 } 114 151 115 //creating resultset 116 while (!readQueue.IsEmpty) 117 { 118 if (readQueue.TryDequeue(out item)) 119 { 120 res.Add(item); 121 } 122 } 123 return res.ToArray(); 124 } 125 catch (Exception ex) 126 { 127 AddError("PeerNetworkMessageHandler.GetDataFromNetwork", ex); 128 return null; 129 } 130 } 131 132 public PeerInfo GetPeerInfo() 133 { 134 return ownInstance; 135 } 136 137 public List<PeerInfo> GetCurrentNetwork() 138 { 139 return peerListManager.GetPeerList(); 140 } 141 142 private string GetInternalIpAddress(string ipPrefix) 143 { 144 try 145 { 146 var strHostName = Dns.GetHostName(); 147 // Then using host name, get the IP address list.. 148 IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 149 IPAddress[] addr = ipEntry.AddressList; 150 151 return addr 152 .Select(ip => ip.ToString()) 153 .First(str => str.StartsWith(ipPrefix)); 154 } 155 catch { return null; } 156 } 157 158 private void OnPopulationRecieved(object sender, MessageRecieveEventArgs e) 159 { 160 if (e != null) 161 { 162 lock (activeQueueLocker) 163 { 164 foreach (byte[] item in e.data) 165 { 166 writeQueue.Enqueue(item); 167 } 168 } 169 } 170 } 171 172 private void AddError(string source, Exception ex) 173 { 174 if (peerListManager != null) 175 { 176 try 177 { 178 peerListManager.SendLogToServer(string.Concat("Source: ", source, ", Exception: ", ex.Message)); 179 } 180 catch { } 181 } 182 } 183 184 } 152 } 185 153 } -
branches/thasling/DistributedGA/DistributedGA.Core/Implementation/WcfMessageService.cs
r13923 r13924 7 7 using DistributedGA.Core.Interface; 8 8 9 namespace DistributedGA.Core.Implementation 10 { 11 public class WcfMessageService : IMessageService 12 { 13 public event EventHandler<MessageRecieveEventArgs> OnDataRecieved; 9 namespace DistributedGA.Core.Implementation { 10 public class WcfMessageService : IMessageService { 11 public event EventHandler<MessageRecieveEventArgs> OnDataRecieved; 14 12 15 13 private static ManualResetEvent _ResetEvent = new ManualResetEvent(false); 16 14 17 15 private IMessageContract messageContract = null; 18 16 19 public int Init(string ip) 20 { 21 int port = 0; 22 port = FreeTcpPort(); 17 public int Init(string ip) { 18 int port = 0; 19 port = FreeTcpPort(); 23 20 24 25 21 messageContract = new MessageContractImpl(); 22 messageContract.MessageRecieved += new EventHandler<MessageRecieveEventArgs>(OnMessageRecieved); 26 23 27 var serviceUrl = "DistributedGA.svc"; 28 new Thread(() => 29 { 30 var baseUri = new Uri(string.Concat("net.tcp://", ip, ":", port, "/DistributedGA")); 31 var serviceUri = new Uri(baseUri, serviceUrl); 32 NetTcpBinding binding = new NetTcpBinding(); 24 var serviceUrl = "DistributedGA.svc"; 25 new Thread(() => { 26 var baseUri = new Uri(string.Concat("net.tcp://", ip, ":", port, "/DistributedGA")); 27 var serviceUri = new Uri(baseUri, serviceUrl); 28 NetTcpBinding binding = new NetTcpBinding(); 33 29 34 using (var host = new ServiceHost(messageContract, serviceUri)) 35 { 36 host.AddServiceEndpoint(typeof(IMessageContract), binding, serviceUri); 30 using (var host = new ServiceHost(messageContract, serviceUri)) { 31 host.AddServiceEndpoint(typeof(IMessageContract), binding, serviceUri); 37 32 38 33 host.Open(); 39 34 40 _ResetEvent.WaitOne(); 41 } 42 }).Start(); 43 return port; 35 _ResetEvent.WaitOne(); 44 36 } 37 }).Start(); 38 return port; 39 } 45 40 46 public void Dispose() 47 { 48 _ResetEvent.Set(); 49 } 41 public void Dispose() { 42 _ResetEvent.Set(); 43 } 50 44 51 private int FreeTcpPort() 52 { 53 TcpListener l = new TcpListener(IPAddress.Loopback, 0); 54 l.Start(); 55 int port = ((IPEndPoint)l.LocalEndpoint).Port; 56 l.Stop(); 57 return port; 58 } 45 private int FreeTcpPort() { 46 TcpListener l = new TcpListener(IPAddress.Loopback, 0); 47 l.Start(); 48 int port = ((IPEndPoint)l.LocalEndpoint).Port; 49 l.Stop(); 50 return port; 51 } 59 52 60 private void OnMessageRecieved(object sender, MessageRecieveEventArgs e) 61 { 62 if (OnDataRecieved != null) 63 { 64 OnDataRecieved(this, e); 65 } 66 } 53 private void OnMessageRecieved(object sender, MessageRecieveEventArgs e) { 54 if (OnDataRecieved != null) { 55 OnDataRecieved(this, e); 56 } 67 57 } 58 } 68 59 } -
branches/thasling/DistributedGA/DistributedGA.Core/Interface/IContactService.cs
r13887 r13924 7 7 using System.Threading.Tasks; 8 8 9 namespace DistributedGA.Core.Interface 10 { 11 [ServiceContract] 12 public interface IContactService 13 { 14 [OperationContract] 15 void RegisterPeer(PeerInfo source); //Registers own instance at the contact-server 9 namespace DistributedGA.Core.Interface { 10 [ServiceContract] 11 public interface IContactService { 12 [OperationContract] 13 void RegisterPeer(PeerInfo source); //Registers own instance at the contact-server 16 14 17 18 15 [OperationContract] 16 List<PeerInfo> GetPeerList(PeerInfo source); //Recieves all peers in the network from contact-server 19 17 20 21 18 [OperationContract] 19 void UpdateHeartbeat(PeerInfo source); //Sends heartbeat to contact-server 22 20 23 24 21 [OperationContract] 22 void MakeLog(PeerInfo source, string msg); //Used to log all peers at a single location 25 23 26 24 } 27 25 } -
branches/thasling/DistributedGA/DistributedGA.Core/Interface/IMessageContract.cs
r13887 r13924 3 3 using DistributedGA.Core.Domain; 4 4 5 namespace DistributedGA.Core.Interface 6 { 5 namespace DistributedGA.Core.Interface { 7 6 8 [ServiceContract] 9 public interface IMessageContract 10 { 7 [ServiceContract] 8 public interface IMessageContract { 11 9 12 13 10 [OperationContract] 11 void SendData(PeerInfo sender, byte[][] data); 14 12 15 16 13 event EventHandler<MessageRecieveEventArgs> MessageRecieved; 14 } 17 15 } -
branches/thasling/DistributedGA/DistributedGA.Core/Interface/IMessageHandler.cs
r13887 r13924 2 2 using DistributedGA.Core.Domain; 3 3 4 namespace DistributedGA.Core.Interface 5 { 4 namespace DistributedGA.Core.Interface { 6 5 7 public interface IMessageHandler 8 { 6 public interface IMessageHandler { 9 7 10 8 void Init(string lanIpPrefix, string contactServerUrl); //Registers at contract-server 11 9 12 10 void PublishDataToNetwork(byte[][] data); 13 11 14 12 byte[][] GetDataFromNetwork(); 15 13 16 14 PeerInfo GetPeerInfo(); 17 15 18 16 List<PeerInfo> GetCurrentNetwork(); 19 17 20 21 18 void Dispose(); 19 } 22 20 } -
branches/thasling/DistributedGA/DistributedGA.Core/Interface/IMessageSender.cs
r13918 r13924 1 1 using DistributedGA.Core.Domain; 2 2 3 namespace DistributedGA.Core.Interface 4 { 3 namespace DistributedGA.Core.Interface { 5 4 6 public interface IMessageSender 7 { 5 public interface IMessageSender { 8 6 9 7 void Init(PeerInfo source); 10 8 11 9 void SendData(PeerInfo destination, byte[][] data); 12 10 13 14 11 void Dispose(); 12 } 15 13 } -
branches/thasling/DistributedGA/DistributedGA.Core/Interface/IMessageService.cs
r13887 r13924 2 2 using DistributedGA.Core.Domain; 3 3 4 namespace DistributedGA.Core.Interface 5 { 4 namespace DistributedGA.Core.Interface { 6 5 7 public interface IMessageService 8 { 6 public interface IMessageService { 9 7 10 11 12 13 14 15 8 /// <summary> 9 /// Initializes a WCF service and host it with another thread 10 /// </summary> 11 /// <param name="ip">current external ip address</param> 12 /// <returns>The port, on which the service was successfully hosted</returns> 13 int Init(string ip); 16 14 17 15 void Dispose(); 18 16 19 20 17 event EventHandler<MessageRecieveEventArgs> OnDataRecieved; 18 } 21 19 } -
branches/thasling/DistributedGA/DistributedGA.Core/Interface/IPeerListManager.cs
r13918 r13924 2 2 using DistributedGA.Core.Domain; 3 3 4 namespace DistributedGA.Core.Interface 5 { 4 namespace DistributedGA.Core.Interface { 6 5 7 public interface IPeerListManager 8 { 6 public interface IPeerListManager { 9 7 10 8 void Init(PeerInfo source, string contactServerUrl); //Registers own instance at the contact-server 11 9 12 10 List<PeerInfo> GetPeerList(); //Recieves all peers in the network from contact-server 13 11 14 12 void SendLogToServer(string msg); 15 13 16 17 14 void Dispose(); 15 } 18 16 } -
branches/thasling/DistributedGA/DistributedGA.sln
r13555 r13924 2 2 Microsoft Visual Studio Solution File, Format Version 12.00 3 3 # Visual Studio 2013 4 VisualStudioVersion = 12.0. 31101.04 VisualStudioVersion = 12.0.21005.1 5 5 MinimumVisualStudioVersion = 10.0.40219.1 6 6 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistributedGA.Test", "DistributedGA.Test\DistributedGA.Test.csproj", "{E0E91C06-C56A-454F-9F7C-3FA7AE7F920E}" 7 7 EndProject 8 8 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistributedGA.Core", "DistributedGA.Core\DistributedGA.Core.csproj", "{02E73F42-BDC9-4A7A-B74F-5879DEF27320}" 9 EndProject10 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistributedGA.Operator", "DistributedGA.Operator\DistributedGA.Operator.csproj", "{2443717F-222B-41AB-AC69-0EF69E83765F}"11 9 EndProject 12 10 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistributedGA.ContactServer", "DistributedGA.ContactServer\DistributedGA.ContactServer.csproj", "{554DAD06-0BF9-4908-BD62-D5FDC46A8B74}" … … 32 30 {02E73F42-BDC9-4A7A-B74F-5879DEF27320}.Release|Any CPU.ActiveCfg = Release|Any CPU 33 31 {02E73F42-BDC9-4A7A-B74F-5879DEF27320}.Release|Any CPU.Build.0 = Release|Any CPU 34 {2443717F-222B-41AB-AC69-0EF69E83765F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU35 {2443717F-222B-41AB-AC69-0EF69E83765F}.Debug|Any CPU.Build.0 = Debug|Any CPU36 {2443717F-222B-41AB-AC69-0EF69E83765F}.Release|Any CPU.ActiveCfg = Release|Any CPU37 {2443717F-222B-41AB-AC69-0EF69E83765F}.Release|Any CPU.Build.0 = Release|Any CPU38 32 {554DAD06-0BF9-4908-BD62-D5FDC46A8B74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 39 33 {554DAD06-0BF9-4908-BD62-D5FDC46A8B74}.Debug|Any CPU.Build.0 = Debug|Any CPU
Note: See TracChangeset
for help on using the changeset viewer.