package com.ycsoft.login;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.ycsoft.commons.helper.JsonHelper;
public class SocketServerThread extends Thread{
private BufferedReader in;
private BufferedWriter writer;
private Socket socket = null;
public SocketServerThread(Socket socket){
this.socket = socket;
}
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
String recStr = in.readLine();
String result ="";
if (recStr != null&&recStr.length()>0) {
System.out.println(socket.getInetAddress()+recStr);
String c = recStr.substring(0,1);
recStr = recStr.substring(1);
if (c.equals("g")){
//切换系统
String[] p = recStr.split(",");
if (p.length == 3) {
OnlineUser ouser = (OnlineUser)OnlineUser.map.get(p[0]);
if (ouser!=null){
String sessionid = (String) ouser.getServers().get(socket.getInetAddress()+p[2]);
if (sessionid == null ){
ouser.getServers().put(socket.getInetAddress()+p[2],p[1]);
}
result = JsonHelper.fromObject(ouser.getOptr());
}
}
}else if(c.equals("c")){
//session失效
String[] p = recStr.split(",");
if (p.length == 2) {
OnlineUser ouser = OnlineUser.map.get(p[0]);
if (ouser!=null){
ouser.getServers().remove(socket.getInetAddress()+p[1]);
if(ouser.getServers().size()==0)
OnlineUser.map.remove(p[0]);
}
}
}else if(c.equals("o")){
//安全退出
OnlineUser.map.remove(recStr);
}else if(c.equals("d")){
//删除指定服务器上的用户数据
String[] p = recStr.split(",");
Iterator<String> onlineSesids = OnlineUser.map.keySet().iterator();
List<String> delsesid = new ArrayList<String>();
while(onlineSesids.hasNext()){
String onlineSesid = onlineSesids.next();
OnlineUser onlineUser = OnlineUser.map.get(onlineSesid);
Iterator<String> serverNames = onlineUser.getServers().keySet().iterator();
int i =0;
while(serverNames.hasNext()){
String resname = serverNames.next();
if(resname!=null && resname.indexOf(socket.getInetAddress().toString())>-1){
onlineUser.getServers().remove(resname);
continue;
}
i++;
}
if (i==0){
delsesid.add(onlineSesid);
}
}
for (String sesid :delsesid){
OnlineUser.map.remove(sesid);
}
OnlineUser.map.remove(p[0]);
}else if(c.equals("a")){
// 增加操作内容
String[] p = recStr.split(",");
OnlineUser ouser = OnlineUser.map.get(p[0]);
if (ouser != null && p.length > 1) {
ouser.addResourceList(p[1]);
}
}
}
writer.write(result);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
writer.close();
in.close();
} catch (IOException e) {
}
}
}
}