public Hashtable<Socket, DataOutputStream> outputStreams = new Hashtable<Socket, DataOutputStream>();
public Hashtable<Socket, String> loggedUsers = new Hashtable<Socket, String>();
public Hashtable<Socket, String> userChanel = new Hashtable<Socket, String>();
private Vector vChanels = null;
while(true)
{
try
{
Socket client = server.accept();
System.out.println("[" + getTimeString() + "] Connection from " + client + " added");
DataOutputStream out = new DataOutputStream(client.getOutputStream());
outputStreams.put(client, out);
new ServerThread(this, client);
if(db.getButtler())
{
sendToUser(client, "butlername:"+db.getButtlerName());
}
} catch (IOException e) {}
}
private void login(Socket client, String message)
{
String nick = message.substring(0, message.indexOf("|"));
String tmp = message.substring(message.indexOf("|") + 1);
String password = tmp.substring(0, tmp.indexOf("|"));
String chanelStr = tmp.substring(tmp.indexOf("|") + 1);
boolean ip = true;
synchronized (loggedUsers)
{
Enumeration<Socket> keys = loggedUsers.keys();
while (keys.hasMoreElements())
{
Socket key = keys.nextElement();
if (getIP(key).equals(getIP(client)))
{
ip = false;
}
}
}
if(loggedUsers.size() == db.getMaxChatter() && db.getMaxChatter() != 0)
{
sendToUser(client, "server:maxchatter");
}else{
if(!ip && !db.getDoubleLogin())
{
sendToUser(client, "server:ip");
}else{
if (db.userLogin(nick, password, getTimestamp()))
{
int lastLogin = getTimestamp() - db.getLastmessage(nick);
nick = db.getNick(nick);
System.out.println("[" + getTimeString() + "] Login from " + client + " with nick \"" + nick + "\" and password \"" + password + "\" granted");
String name = "";
String thema = "";
int buttler = 0;
int welcome = 0;
int greeting = 0;
String wColor = "";
String pw = "";
try
{
Socket nick2kick = null;
if(getClientWithNick(nick) != client) // Equals für Doppelchannel
{
nick2kick = getClientWithNick(nick);
}else{
nick2kick = null;
}
if (chanelStr.equals(""))
{
if (db.getUserLevel(nick) >= 3)
{
chanelStr = "Admin";
if (db.userAllowed(nick, "hide") && !db.isHide(nick) && getUserLevel(client) >= commandlevels.get("hide"))
{
db.updateHide(nick, 1);
}
}else{
chanelStr = "Knutschecke";
}
}
if (db.isJail(nick) >= 1)
{
chanelStr = "Jail";
if (!db.isTimeout(nick))
{
db.updateTimeout(nick, 1);
}
}
ResultSet result = db.channelIn(chanelStr);
while (result.next())
{
name = result.getString("name");
int mindeststatus = result.getInt("mindeststatus");
int maxchatter = result.getInt("maxchatter");
thema = result.getString("thema");
buttler = result.getInt("buttler");
welcome = result.getInt("welcome");
greeting = result.getInt("greeting");
wColor = result.getString("farbe_come");
pw = result.getString("passwort");
int channelMax = 0;
int channelIn = 0;
int channelMin = 0;
if(db.getUserLevel(nick) >= mindeststatus || chanelStr.equals("Jail"))
{
for (int i = 0; i < vChanels.size(); i++)
{
Chanel chanel = (Chanel) vChanels.get(i);
if (chanel.getName().equals(name))
{
channelMax = chanel.getMaxChatter();
channelIn = chanel.getUsersLogedIn();
channelMin = chanel.getMindesStatus();
}
}
boolean isPw = true;
if(Integer.parseInt(db.getUserItem(nick, "age")) != 0 && !db.getUserItem(nick, "sex").equals(""))
{
if (channelIn < channelMax || db.getUserLevel(nick) >= 2 || chanelStr.equals("Jail"))
{
if (!db.isBanned(nick))
{
if (!db.isLocked(nick, getTimestamp()) && !db.isPermaLocked(nick,getTimestamp()))
{
if(!pw.equals(""))
{
if(db.getUserLevel(nick) <= 1)
{
String eingabe = JOptionPane.showInputDialog(null,"Geben Sie das Passwort für diesen Chanel ein.","Passwortschutz",JOptionPane.PLAIN_MESSAGE);
if(!eingabe.equals(pw))
{
isPw = false;
}
}else{
isPw = true;
}
}
if(isPw)
{
if (db.isTestmodus() && db.getUserLevel(nick) <= 2)
{
sendToUser(client, "server:isTested");
}else{
if(nick2kick != null)
{
sendToUser(nick2kick, "server:doubleLogin");
removeConnection(nick2kick);
}
if(loggedUsers.contains(nick))
{
sendToUser(client, "server:isLoggedIn");
}else{
for (int i = 0; i < vChanels.size(); i++)
{
Chanel chanel = (Chanel) vChanels.get(i);
if (chanel.getName().equals(name))
{
chanel.setUsersLogedIn(chanel.usersLogedIn + 1);
}
}
userChanel.put(client, name);
loggedUsers.put(client, nick);
sendToUser(client, "server:setChatframeOver:"+db.getSettingsOver()+"<-->"+db.getSettingsOverMessage());
synchronized (outputStreams)
{
if (outputStreams.get(client) == null)
{
try
{
DataOutputStream out = new DataOutputStream(client.getOutputStream());
outputStreams.put(client,out);
}
catch (IOException e) {}
}
sendToUser(client, "colorsFont:"+db.getColors(userChanel.get(client)));
sendToUser(client, "server:setUserLevel:"+getUserLevel(client));
DataOutputStream out = outputStreams.get(client);
String c_Path = db.getChannelItem(userChanel.get(client),"pic");
if (c_Path.equals(""))
{
c_Path = "default.jpg";
}
sendToUser(client, "setChannelBackgroudPic:" +db.getURL()+"images/background/<-->"+ c_Path);
sendToUser(client, "setChannelColors:"+ db.getChannelItem(userChanel.get(client),"schriftgroesse")+ "<-->"+ db.getChannelItem(userChanel.get(client),"schriftfarbe")+ "<-->"+ db.getChannelItem(userChanel.get(client),"p_schriftfarbe")+ "<-->"+ db.getChannelItem(userChanel.get(client),"privat_schriftfarbe")+ "<-->"+ db.getChannelItem(userChanel.get(client),"min_schriftgroesse")+ "<-->"+ db.getChannelItem(userChanel.get(client),"max_schriftgroesse"));
sendToUser(client, "server:updateUserlist:"+nick+"<-->"+db.getUserItem(nick, "sex")+"<-->"+Integer.parseInt(db.getUserItem(nick, "age")));
String params = db.userChatfenster(nick);
int datumUndUhrzeit = Integer.parseInt(params.substring(0, params.indexOf("<-->")));
params = params.substring(params.indexOf("<-->") + 4);
int userlist = Integer.parseInt(params.substring(0, params.indexOf("<-->")));
params = params.substring(params.indexOf("<-->") + 4);
int toolbar = Integer.parseInt(params);
sendToUser(client, "server:timestring:"+datumUndUhrzeit);
sendToUser(client, "server:userlist:"+userlist);
sendToUser(client, "server:toolbar:"+toolbar);
try
{
out.writeUTF("status:login granted:"+ nick);
sendToUser(client,"status:login granted:"+ nick);
Enumeration<Socket> keys = loggedUsers.keys();
while (keys.hasMoreElements())
{
Socket key = keys.nextElement();
String chanelTmp = userChanel.get(key);
String nickTmp = loggedUsers.get(key);
if (key != client)
{
if (chanelTmp != null)
{
if (chanelTmp.equals(chanelStr))
{
out.writeUTF("join:"+ loggedUsers.get(key)+ ":"+ db.getUserLevel(nickTmp)+":"+db.getUserItem(loggedUsers.get(key), "age")+":"+db.getUserItem(loggedUsers.get(key), "sex"));
}
}
}
}
} catch (IOException e) {}
db.addLoginIp(nick, getIP(client));
String official = db.getChannelItem(name, "public");
String chattitel = db.getChattitel();
if (official.equals("0"))
{
sendToUser(client, "server:setTitle:"+chattitel+": Nick " + nick + " || Channel " + name + " (Privat)");
}else{
sendToUser(client, "server:setTitle:"+chattitel+": Nick " + nick + " || Channel " + name);
}
if (!thema.equals(""))
{
if (db.getButtler())
{
sendToUser(client, "message:[b]Thema dieses Channels:[/b] " + thema+"\n");
}else{
sendToUser(client, "message:[b]Thema dieses Channels:[/b] " + thema+"\n");
}
}
if (db.isMuted(nick))
{
sendToUser(client, "server:finalmute");
}
if (!db.isHide(loggedUsers.get(client)))
{
sendToChannelIn("join:" + nick + ":" + db.getUserLevel(nick)+":"+Integer.parseInt(db.getUserItem(nick, "age"))+":"+db.getUserItem(nick, "sex"), client);
if (welcome == 1)
{
if (db.isButtler(userChanel.get(client)))
{
if (db.getButtler())
{
//sendToChannelIn("message:"+wColor+ db.getButtlerName() + ": " + nick + " hat den Raum betreten", client);
butlerSend(wColor+nick + " hat den Raum betreten.", userChanel.get(client));
}else{
//sendToChannelIn("message:"+wColor+ db.getProjektname() + ": " + nick + " hat den Raum betreten", client);
butlerSend(wColor+nick + " hat den Raum betreten.", userChanel.get(client));
}
}
}
if (greeting == 1)
{
if (db.isButtler(userChanel.get(client)))
{
Random rand = new Random();
int grtIndex = Math.abs(rand.nextInt()) % buttler_greetings.size();
String greetings = buttler_greetings.get(grtIndex).replaceAll("%NICK%",nick);
if (db.getButtler())
{
//sendToChannelIn("message:"+ db.getButtlerName()+ ": "+ greetings,client);
butlerSend(greetings, userChanel.get(client));
}else{
//sendToChannelIn("message:"+ db.getProjektname()+ ": "+ greetings,client);
butlerSend(greetings, userChanel.get(client));
}
}
}
} else {
sendToChannelIn("join:" + nick + ":" + db.getUserLevel(nick)+":"+Integer.parseInt(db.getUserItem(nick, "age"))+":"+db.getUserItem(nick, "sex"), client);
sendToChannelIn("hide:" + loggedUsers.get(client)+":"+db.getUserItem(loggedUsers.get(client), "age")+":"+db.getUserItem(loggedUsers.get(client), "sex")+":"+getUserLevel(client),client);
sendToUser(client,"privatein:Sie befinden sich im /hide");
}
db.updateUserLoggedIn(nick, 1);
Enumeration<Socket> keys = userChanel.keys();
while (keys.hasMoreElements())
{
Socket key = keys.nextElement();
if (db.isHide(loggedUsers.get(key)))
{
sendToChannelIn("hide:" + loggedUsers.get(key)+":"+db.getUserItem(loggedUsers.get(key),"age")+":"+db.getUserItem(loggedUsers.get(key), "sex")+":"+getUserLevel(key),client);
}
if (!db.isButtler(userChanel.get(client)))
{
sendToUser(client, "server:butlerG:"+ db.getButtlerName());
}
}
if (db.userBrief(loggedUsers.get(client)) == 1)
{
sendToUser(client,"privatein:Es befindet sich ein Brief in Ihrem Briefkasten.");
} else if (db.userBrief(loggedUsers.get(client)) >= 1)
{
sendToUser(client,"privatein:Es befinden sich Briefe in Ihrem Briefkasten.");
}
if (db.isTrouble(loggedUsers.get(client)))
{
sendToUser(client,"privatein:Sie können derzeit nicht angeschrieben werden.");
}
if (db.isJail(nick) >= 1)
{
channelChange(client, "jail");
sendToUser(client, "server:jail:"+ db.isJailReason(nick)+ "<-->" + db.isJail(nick));
}
db.updateAnwesenheit(nick, 1);
sendToUser(client, "sm:01<-->0");
sendToUser(client, "sm:02<-->0");
sendToUser(client, "sm:03<-->0");
sendToUser(client, "sm:04<-->0");
sendToUser(client, "sm:05<-->0");
sendToUser(client, "sm:06<-->0");
sendToUser(client, "sm:07<-->0");
if(db.getSmiley(nick, "#:-)"))
{
sendToUser(client, "sm:01<-->1");
}
if(getUserLevel(client) >= 4)
{
sendToUser(client, "sm:01<-->1");
sendToUser(client, "sm:02<-->1");
sendToUser(client, "sm:03<-->1");
sendToUser(client, "sm:04<-->1");
sendToUser(client, "sm:05<-->1");
sendToUser(client, "sm:06<-->1");
sendToUser(client, "sm:07<-->1");
}
if(db.isLoginMessage(loggedUsers.get(client)) && !db.isHide(loggedUsers.get(client)) && db.isUserUpgrade(loggedUsers.get(client)))
{
sendToChannelIn("send:"+db.getUserItem(loggedUsers.get(client),"loginmessage"), client);
}
}
}
//}else{
// sendToUser(client, "server:doubleLogin");
//}
}
}else{
sendToUser(client, "server:pwfalse");
}
} else {
sendToUser(client, "server:isLocked");
}
} else {
sendToUser(client, "server:isBanned");
}
} else {
sendToUser(client, "server:channelfull");
}
}else{
sendToUser(client, "server:setSexAlter:"+nick+"<-->"+Integer.parseInt(db.getUserItem(nick, "age"))+"<-->"+db.getUserItem(nick, "sex"));
}
} else {
sendToUser(client, "server:channeldenied");
}
}
} catch (SQLException e) {
System.out.println(e.toString());
}
// }
// }
} else {
sendToUser(client, "status:accessdenied:" + nick);
}
}
}
}