Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import it.sauronsoftware.base64.Base64;
- import java.io.*;
- import java.net.*;
- import java.util.ArrayList;
- public class ClientListener extends Thread {
- static ArrayList<String> myArr = new ArrayList<String>();
- String nickName;
- static int count = 0;
- public static NickName[] nicks = new NickName[20];
- private ServerDispatcher mServerDispatcher;
- private ClientInfo mClientInfo;
- private BufferedReader mIn;
- public static ClientInfo[] cInfo = new ClientInfo[20];
- public ClientListener(ClientInfo aClientInfo,
- ServerDispatcher aServerDispatcher) throws IOException {
- cInfo[count] = aClientInfo;
- mClientInfo = aClientInfo;
- mServerDispatcher = aServerDispatcher;
- Socket socket = aClientInfo.mSocket;
- mIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- }
- /**
- * Until interrupted, reads messages from the client socket, forwards them
- * to the server dispatcher's queue and notifies the server dispatcher.
- */
- public void run() {
- try {
- Socket sockete = mClientInfo.mSocket;
- String senderIP = sockete.getInetAddress().getHostAddress();
- String senderPort = "" + sockete.getPort();
- while (!isInterrupted()) {
- String message = mIn.readLine();
- if (message == null)
- break;
- message = Base64.decode(message);
- if (message.startsWith("^n")) {
- char[] nickN = new char[message.length() - 3];
- for (int i = 0; i < message.length() - 3; i++) {
- nickN[i] = message.toCharArray()[i + 3];
- }
- nickName = new String(nickN);
- boolean found = false;
- for (int d = 0; d <= count; d++) {
- if (nicks[d] != null
- && nicks[d].getIP().equals(
- "" + senderIP + senderPort)) {
- mServerDispatcher.dispatchMessage(mClientInfo, "c<"
- + nicks[d].nick + "><" + nickName + ">");
- mServerDispatcher
- .dispatchMessage(
- mClientInfo,
- (nicks[d].nick
- + " си смени ника на : " + nickName));
- nicks[d].nick = nickName;
- myArr.set(d, nickName);
- found = true;
- }
- }
- for (int d = 0; d <= count; d++) {
- if (nicks[d] != null
- && nicks[d].getIP().equals(
- "" + senderIP + senderPort)) {
- found = true;
- }
- if (!found && d == count) {
- mServerDispatcher.dispatchMessage(mClientInfo, "n<"
- + nickName + ">");
- mServerDispatcher.dispatchMessage(mClientInfo,
- nickName + " се присъедини.");
- nicks[count] = new NickName(nickName, "" + senderIP
- + senderPort);
- myArr.add(nickName);
- count++;
- break;
- }
- }
- }
- if (!message.startsWith("^n"))
- if (message.length() != 0) {
- for (int k = 0; k < 20; k++) {
- if (ClientListener.nicks[k] != null
- && nicks[k].getIP().equals(
- senderIP + senderPort)) {
- message = ClientListener.nicks[k].getNick()
- + " : " + message;
- mServerDispatcher.dispatchMessage(mClientInfo,
- message);
- }
- }
- }
- }
- for(int i =0;i<count;i++){
- Socket socketz = cInfo[i].mSocket;
- String curAuth = socketz.getInetAddress().getHostAddress() + ""+ socketz.getPort();
- System.out.println(curAuth +" " +nicks[i].getIP());
- if(cInfo[i] != null && curAuth == nicks[i].getIP()){
- for(int z =0;z<count;z++){
- mServerDispatcher.dispatchMessage(cInfo[z], "n<"
- + nicks[i].getNick() + ">");
- }
- }
- }
- } catch (IOException ioex) {
- // when the connection is lost inbetween
- Socket sockete = mClientInfo.mSocket;
- String senderIP = sockete.getInetAddress().getHostAddress();
- String senderPort = "" + sockete.getPort();
- for (int i = 0; i < 20; i++) {
- if (nicks[i] != null
- && nicks[i].getIP().equals(senderIP + senderPort)) {
- String message = nicks[i].getNick() + " напусна.";
- mServerDispatcher.dispatchMessage(mClientInfo, "d<"
- + nicks[i].getNick() + ">");
- mServerDispatcher.dispatchMessage(mClientInfo, message);
- nicks[i] = null;
- count--;
- }
- }
- }
- // Communication is broken. Interrupt both listener and sender threads
- mClientInfo.mClientSender.interrupt();
- mServerDispatcher.deleteClient(mClientInfo);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement