2018-12-16 17:27:44 +03:00
|
|
|
package InnaIrcBot.ProvidersConsumers;
|
|
|
|
|
2020-10-20 03:37:20 +03:00
|
|
|
import java.io.IOException;
|
2018-12-16 17:27:44 +03:00
|
|
|
import java.io.OutputStream;
|
|
|
|
import java.io.OutputStreamWriter;
|
|
|
|
import java.net.Socket;
|
|
|
|
import java.util.HashMap;
|
2020-10-20 03:37:20 +03:00
|
|
|
import java.util.concurrent.BlockingQueue;
|
2018-12-16 17:27:44 +03:00
|
|
|
|
|
|
|
public class StreamProvider {
|
|
|
|
|
2020-10-20 03:37:20 +03:00
|
|
|
private static final HashMap<String, OutputStreamWriter> srvStreamMap = new HashMap<>();
|
|
|
|
private static final HashMap<String, BlockingQueue<String>> srvSysConsumersMap = new HashMap<>();
|
2018-12-16 17:27:44 +03:00
|
|
|
|
|
|
|
public static synchronized void writeToStream(String server, String message){
|
|
|
|
try {
|
|
|
|
srvStreamMap.get(server).write(message+"\n");
|
|
|
|
srvStreamMap.get(server).flush();
|
2019-01-12 18:31:05 +03:00
|
|
|
// If this application says something, then pass it into system consumer thread to handle
|
2019-01-29 01:28:11 +03:00
|
|
|
if (message.startsWith("PRIVMSG ")) {
|
2020-10-20 03:37:20 +03:00
|
|
|
srvSysConsumersMap.get(server).add("INNA "+message);
|
2019-01-12 18:31:05 +03:00
|
|
|
}
|
2020-10-20 03:37:20 +03:00
|
|
|
} catch (IOException e){
|
|
|
|
System.out.println("Internal issue: StreamProvider->writeToStream() caused I/O exception:\n\t"+e.getMessage());
|
2018-12-16 17:27:44 +03:00
|
|
|
}
|
|
|
|
}
|
2020-10-20 03:37:20 +03:00
|
|
|
public static synchronized void setStream(String server, Socket socket) throws IOException{
|
|
|
|
OutputStream outStream = socket.getOutputStream();
|
|
|
|
srvStreamMap.put(server, new OutputStreamWriter(outStream));
|
2018-12-16 17:27:44 +03:00
|
|
|
}
|
|
|
|
public static synchronized void delStream(String server){
|
|
|
|
srvStreamMap.remove(server);
|
2019-01-12 18:31:05 +03:00
|
|
|
srvSysConsumersMap.remove(server);
|
|
|
|
}
|
|
|
|
|
2020-10-20 03:37:20 +03:00
|
|
|
public static synchronized void setSysConsumer(String server, BlockingQueue<String> queue){
|
|
|
|
srvSysConsumersMap.put(server, queue);
|
2018-12-16 17:27:44 +03:00
|
|
|
}
|
|
|
|
}
|