218 lines
6.2 KiB
Java
218 lines
6.2 KiB
Java
|
|
package tcpConnection;
|
||
|
|
|
||
|
|
import android.util.Log;
|
||
|
|
|
||
|
|
import java.io.DataOutputStream;
|
||
|
|
import java.io.IOException;
|
||
|
|
import java.io.InputStream;
|
||
|
|
import java.net.Socket;
|
||
|
|
import java.util.Timer;
|
||
|
|
import java.util.TimerTask;
|
||
|
|
|
||
|
|
import soapConnection.DataIdentifier;
|
||
|
|
import soapConnection.Packet;
|
||
|
|
import soapConnection.SoapCalls;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Created by JettenM on 04.08.2016.
|
||
|
|
*/
|
||
|
|
public class SocketManager {
|
||
|
|
|
||
|
|
private static final String TAG = "SOCKET_MANAGER";
|
||
|
|
|
||
|
|
public static String tenant;
|
||
|
|
public static Socket socket;
|
||
|
|
public static Thread listenerThread;
|
||
|
|
public static SocketListener socketListener;
|
||
|
|
public static UIHandler uiHandler;
|
||
|
|
public static DataOutputStream dataOutputStream;
|
||
|
|
|
||
|
|
public static void connectToServer(){
|
||
|
|
new Thread(new OpenConnection()).start();
|
||
|
|
}
|
||
|
|
|
||
|
|
public static void sendMessage(Packet packet) {
|
||
|
|
new Thread(new MessageSender(packet.getDataStream())).start();
|
||
|
|
}
|
||
|
|
|
||
|
|
public static class OpenConnection implements Runnable {
|
||
|
|
public void run() {
|
||
|
|
try {
|
||
|
|
socket = new Socket(SoapCalls.DESTINATION_ADDRESS, SoapCalls.DESTINATION_PORT);
|
||
|
|
|
||
|
|
LoginOnServer();
|
||
|
|
|
||
|
|
dataOutputStream = new DataOutputStream(socket.getOutputStream());
|
||
|
|
|
||
|
|
socketListener = new SocketListener();
|
||
|
|
listenerThread = new Thread(socketListener);
|
||
|
|
listenerThread.start();
|
||
|
|
} catch(Exception exception) {
|
||
|
|
socket = null;
|
||
|
|
try {
|
||
|
|
new Timer().schedule(new TimerTask() {
|
||
|
|
@Override
|
||
|
|
public void run() {
|
||
|
|
connectToServer();
|
||
|
|
}
|
||
|
|
}, 30000);
|
||
|
|
} catch(Exception exception2) {
|
||
|
|
exception2.printStackTrace();
|
||
|
|
}
|
||
|
|
|
||
|
|
exception.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static void closeSocketListener() {
|
||
|
|
if(listenerThread != null && listenerThread.isAlive()) {
|
||
|
|
try {
|
||
|
|
socketListener.terminate();
|
||
|
|
listenerThread.join();
|
||
|
|
} catch (InterruptedException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static void Logout() {
|
||
|
|
if(socket != null && socket.isConnected()) {
|
||
|
|
try {
|
||
|
|
Packet packet = new Packet();
|
||
|
|
|
||
|
|
packet.ChatDataIdentifier = DataIdentifier.LOGOUT;
|
||
|
|
|
||
|
|
new Thread(new MessageSender(packet.getDataStream())).start();
|
||
|
|
|
||
|
|
} catch(Exception exception) {
|
||
|
|
exception.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static void LoginOnServer() {
|
||
|
|
if(socket != null && socket.isConnected()) {
|
||
|
|
try {
|
||
|
|
Packet packet = new Packet();
|
||
|
|
packet.Tenant = tenant;
|
||
|
|
|
||
|
|
packet.ChatDataIdentifier = DataIdentifier.LOGIN;
|
||
|
|
|
||
|
|
new Thread(new MessageSender(packet.getDataStream())).start();
|
||
|
|
|
||
|
|
} catch(Exception exception) {
|
||
|
|
exception.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static class ConnectionClose implements Runnable{
|
||
|
|
public void run(){
|
||
|
|
try {
|
||
|
|
if (dataOutputStream != null) {
|
||
|
|
dataOutputStream.flush();
|
||
|
|
dataOutputStream.close();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (socket != null) {
|
||
|
|
socket.close();
|
||
|
|
}
|
||
|
|
|
||
|
|
}catch(IOException se){
|
||
|
|
se.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static class MessageSender implements Runnable {
|
||
|
|
byte[] packetToSend;
|
||
|
|
|
||
|
|
public MessageSender(byte[] packet2Send) {
|
||
|
|
packetToSend = packet2Send;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public void run() {
|
||
|
|
if(!socket.isConnected()) {
|
||
|
|
Log.e("MESSAGE_SENDER", "Socket ist nicht verbunden");
|
||
|
|
}
|
||
|
|
|
||
|
|
if(socket != null && dataOutputStream != null) {
|
||
|
|
try {
|
||
|
|
dataOutputStream.write(packetToSend);
|
||
|
|
dataOutputStream.flush();
|
||
|
|
} catch (IOException e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static class SocketListener implements Runnable {
|
||
|
|
|
||
|
|
Packet chatPacket;
|
||
|
|
|
||
|
|
private volatile boolean isRunning = true;
|
||
|
|
|
||
|
|
public void terminate() {
|
||
|
|
isRunning = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public void run() {
|
||
|
|
try {
|
||
|
|
while (isRunning) {
|
||
|
|
if (socket != null) {
|
||
|
|
if (socket.isConnected()) {
|
||
|
|
|
||
|
|
InputStream stream = socket.getInputStream();
|
||
|
|
|
||
|
|
int size = stream.available();
|
||
|
|
|
||
|
|
if(size == 0) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
StringBuilder total = new StringBuilder(stream.available());
|
||
|
|
|
||
|
|
int counter = 0;
|
||
|
|
|
||
|
|
byte[] message = new byte[size];
|
||
|
|
|
||
|
|
stream.read(message, 0, size);
|
||
|
|
|
||
|
|
// while(counter < size) {
|
||
|
|
//
|
||
|
|
// char c = (char) stream.read();
|
||
|
|
//
|
||
|
|
// total.append(c);
|
||
|
|
//
|
||
|
|
// counter++;
|
||
|
|
// }
|
||
|
|
|
||
|
|
try {
|
||
|
|
//chatPacket = new Packet(total.toString());
|
||
|
|
chatPacket = new Packet(new String(message, "UTF-8"));
|
||
|
|
|
||
|
|
Log.i(TAG, "Empfange Nachricht... " + chatPacket.ChatMessage);
|
||
|
|
|
||
|
|
} catch(Exception e) {
|
||
|
|
e.printStackTrace();
|
||
|
|
}
|
||
|
|
|
||
|
|
if(uiHandler != null) {
|
||
|
|
uiHandler.updateUserInterface(chatPacket);
|
||
|
|
} else {
|
||
|
|
Log.e("ERROR_SOCKETLISTENER", "uiHandler ist null");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} catch(Exception exception) {
|
||
|
|
exception.printStackTrace();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|