Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/tools/ExternalEvaluation/Java/ExternalEvaluation.Service/src/com/heuristiclab/problems/externalevaluation/ServerSocketListener.java @ 15014

Last change on this file since 15014 was 15014, checked in by pfleck, 7 years ago

Added code and tools for the ExternalEvaluationProblem. (e.g. Java-side evaluation)

File size: 2.6 KB
Line 
1package com.heuristiclab.problems.externalevaluation;
2
3import java.io.*;
4import java.net.*;
5import java.util.*;
6
7public class ServerSocketListener implements IListener {
8  private ServerSocket serverSocket;
9  private int port;
10  private InetAddress bindAddress;
11    private Thread listenerThread;
12  private ListenerThread producer;
13  private ArrayList<ChannelDiscoveredEventListener> listenerList;
14
15    public ServerSocketListener(int port) {
16    this.port = port;
17    this.bindAddress = null;
18    this.producer = new ListenerThread();
19    this.listenerList = new ArrayList<ChannelDiscoveredEventListener>();
20  }
21 
22  public ServerSocketListener(int port, String ipAddress) {
23    this.port = port;
24    try {
25      this.bindAddress = InetAddress.getByName(ipAddress);
26    } catch (UnknownHostException e) {
27      e.printStackTrace();
28    }
29    this.producer = new ListenerThread();
30    this.listenerList = new ArrayList<ChannelDiscoveredEventListener>();
31  }
32
33  @Override
34    public void listen() {
35    if (serverSocket == null) {
36      try {
37      if (bindAddress == null)
38        serverSocket = new ServerSocket(port, 1);
39      else
40        serverSocket = new ServerSocket(port, 1, bindAddress);
41      } catch (IOException e) {
42        e.printStackTrace();
43        return;
44      }
45    }
46        listenerThread = new Thread(this.producer);
47        listenerThread.start();
48    }
49 
50  @Override
51  public void stop() {
52    listenerThread.interrupt();
53      if (serverSocket != null) {
54          try {
55        serverSocket.close();
56      } catch (IOException e) {
57        e.printStackTrace();
58      }
59          serverSocket = null;
60      }
61  }
62
63  @Override
64  public void addChannelDiscoveredEventListener(ChannelDiscoveredEventListener l) {
65    synchronized(listenerList) {
66      listenerList.add(l);
67    }
68  }
69 
70  @Override
71  public void removeChannelDiscoveredEventListener(ChannelDiscoveredEventListener l) {
72    synchronized(listenerList) {
73      listenerList.remove(l);
74    }
75  }
76 
77  private void onDiscovered(IChannel channel) {
78    synchronized(listenerList) {
79      Iterator<ChannelDiscoveredEventListener> listeners = listenerList.iterator();
80      while( listeners.hasNext() ) {
81        listeners.next().discovered(new EventObject(channel));
82      }
83    }
84  }
85 
86  private class ListenerThread implements Runnable {
87
88    @Override
89    public void run() {
90      while (true) {
91          try {
92            Socket client = serverSocket.accept();
93            StreamChannel streamChannel = new StreamChannel(client.getInputStream(), client.getOutputStream());
94            onDiscovered(streamChannel);
95          } catch (Exception e) {
96            try {
97              stop();
98            } catch (Exception tae) {
99              break;
100            }
101          }
102      }
103    }
104  }
105 
106}
Note: See TracBrowser for help on using the repository browser.