3e5ff714edeb84a07510fdd6f1783083dbeba90d
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  * 
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  * 
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * 
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.testsuites.integration.uservice.adapt.websocket;
22
23 import org.onap.policy.apex.core.infrastructure.messaging.MessagingException;
24 import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageListener;
25 import org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WsStringMessageServer;
26 import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities;
27 import org.onap.policy.apex.testsuites.integration.uservice.adapt.events.EventGenerator;
28
29 /**
30  * The Class WebSocketEventProducerServer.
31  */
32 public class WebSocketEventProducerServer implements WsStringMessageListener {
33     private final int port;
34     private final int eventCount;
35     private final boolean xmlEvents;
36     private final long eventInterval;
37     private long eventsSentCount = 0;
38
39     WsStringMessageServer server;
40
41     /**
42      * Instantiates a new web socket event producer server.
43      *
44      * @param port the port
45      * @param eventCount the event count
46      * @param xmlEvents the xml events
47      * @param eventInterval the event interval
48      * @throws MessagingException the messaging exception
49      */
50     public WebSocketEventProducerServer(final int port, final int eventCount, final boolean xmlEvents,
51             final long eventInterval) throws MessagingException {
52         this.port = port;
53         this.eventCount = eventCount;
54         this.xmlEvents = xmlEvents;
55         this.eventInterval = eventInterval;
56
57         server = new WsStringMessageServer(port);
58         server.start(this);
59
60         System.out.println(WebSocketEventProducerServer.class.getCanonicalName() + ": port " + port + ", event count "
61                 + eventCount + ", xmlEvents " + xmlEvents);
62     }
63
64     /**
65      * Send events.
66      */
67     public void sendEvents() {
68         System.out.println(WebSocketEventProducerServer.class.getCanonicalName() + ": sending events on port " + port
69                 + ", event count " + eventCount + ", xmlEvents " + xmlEvents);
70
71         for (int i = 0; i < eventCount; i++) {
72             System.out.println(WebSocketEventProducerServer.class.getCanonicalName() + ": waiting " + eventInterval
73                     + " milliseconds before sending next event");
74             ThreadUtilities.sleep(eventInterval);
75
76             String eventString = null;
77             if (xmlEvents) {
78                 eventString = EventGenerator.xmlEvent();
79             } else {
80                 eventString = EventGenerator.jsonEvent();
81             }
82             server.sendString(eventString);
83             eventsSentCount++;
84             System.out.println(WebSocketEventProducerServer.class.getCanonicalName() + ": port " + port
85                     + ", sent event " + eventString);
86         }
87
88         System.out.println(WebSocketEventProducerServer.class.getCanonicalName() + ": event sending completed");
89     }
90
91     /**
92      * Gets the events sent count.
93      *
94      * @return the events sent count
95      */
96     public long getEventsSentCount() {
97         return eventsSentCount;
98     }
99
100     /**
101      * Shutdown.
102      */
103     public void shutdown() {
104         server.stop();
105         System.out.println(WebSocketEventProducerServer.class.getCanonicalName() + ": stopped");
106     }
107
108     /*
109      * (non-Javadoc)
110      * 
111      * @see
112      * org.onap.policy.apex.core.infrastructure.messaging.stringmessaging.WSStringMessageListener#
113      * receiveString(java.lang.String)
114      */
115     @Override
116     public void receiveString(final String eventString) {
117         System.out.println(WebSocketEventProducerServer.class.getCanonicalName() + ": port " + port
118                 + ", received event " + eventString);
119     }
120
121     /**
122      * The main method.
123      *
124      * @param args the arguments
125      * @throws MessagingException the messaging exception
126      */
127     public static void main(final String[] args) throws MessagingException {
128         if (args.length != 4) {
129             System.err.println("usage WebSocketEventProducerServer port #events XML|JSON eventInterval");
130             return;
131         }
132
133         int port = 0;
134         try {
135             port = Integer.parseInt(args[0]);
136         } catch (final Exception e) {
137             System.err.println("usage WebSocketEventProducerServer port #events XML|JSON eventInterval");
138             e.printStackTrace();
139             return;
140         }
141
142         int eventCount = 0;
143         try {
144             eventCount = Integer.parseInt(args[1]);
145         } catch (final Exception e) {
146             System.err.println("usage WebSocketEventProducerServer port #events XML|JSON eventInterval");
147             e.printStackTrace();
148             return;
149         }
150
151         long eventInterval = 0;
152         try {
153             eventInterval = Long.parseLong(args[3]);
154         } catch (final Exception e) {
155             System.err.println("usage WebSocketEventProducerServer port #events XML|JSON eventInterval");
156             e.printStackTrace();
157             return;
158         }
159
160         boolean xmlEvents = false;
161         if (args[2].equalsIgnoreCase("XML")) {
162             xmlEvents = true;
163         } else if (!args[2].equalsIgnoreCase("JSON")) {
164             System.err.println("usage WebSocketEventProducerServer port #events XML|JSON startDelay eventInterval");
165             return;
166         }
167
168         final WebSocketEventProducerServer server =
169                 new WebSocketEventProducerServer(port, eventCount, xmlEvents, eventInterval);
170
171         server.sendEvents();
172         server.shutdown();
173     }
174 }