Free cookie consent management tool by TermsFeed Policy Generator

source: branches/thasling/DistributedGA/DistributedGA.Core/Implementation/WcfMessageService.cs @ 14252

Last change on this file since 14252 was 14252, checked in by thasling, 8 years ago

#2615:
added IDisposable to classes with Dispose()-Method

File size: 2.1 KB
Line 
1using System;
2using System.Net;
3using System.Net.Sockets;
4using System.ServiceModel;
5using System.Threading;
6using DistributedGA.Core.Domain;
7using DistributedGA.Core.Interface;
8
9namespace DistributedGA.Core.Implementation {
10  public class WcfMessageService : IMessageService, IDisposable {
11    public event EventHandler<MessageRecieveEventArgs> OnDataRecieved;
12
13    private ManualResetEvent _ResetEvent = new ManualResetEvent(false);
14
15    private IMessageContract messageContract = null;
16
17    public int Init(string ip) {
18      int port = 0;
19      port = FreeTcpPort();
20
21      messageContract = new MessageContractImpl();
22      messageContract.MessageRecieved += new EventHandler<MessageRecieveEventArgs>(OnMessageRecieved);
23
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();
29        binding.MaxReceivedMessageSize = 20000000;
30        binding.MaxBufferSize = 20000000;
31        binding.MaxBufferPoolSize = 20000000;
32        binding.ReaderQuotas.MaxArrayLength = 20000000;
33        binding.ReaderQuotas.MaxDepth = 32;
34        binding.ReaderQuotas.MaxStringContentLength = 20000000;
35
36        using (var host = new ServiceHost(messageContract, serviceUri)) {
37          host.AddServiceEndpoint(typeof(IMessageContract), binding, serviceUri);
38
39          host.Open();
40
41          _ResetEvent.WaitOne();
42        }
43      }).Start();
44      return port;
45    }
46
47    public void Dispose() {
48      _ResetEvent.Set();
49      _ResetEvent.Dispose();
50    }
51
52    private int FreeTcpPort() {
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    }
59
60    private void OnMessageRecieved(object sender, MessageRecieveEventArgs e) {
61      if (OnDataRecieved != null) {
62        OnDataRecieved(this, e);
63      }
64    }
65  }
66}
Note: See TracBrowser for help on using the repository browser.