private void receive_callback(IAsyncResult ar) { Socket client = (Socket)ar.AsyncState; client.EndReceive(ar); TCPmessage tcpmessage = new TCPmessage(receivedata); List <SocketData> sendclient = responseMessage(client, tcpmessage); try { foreach (SocketData s in sendclient) { Socket socket = s.socket; byte[] sendmessage = s.message; socket.BeginSend(sendmessage, 0, sendmessage.Length, SocketFlags.None, send_callback, socket); } if (client.Connected) { client.BeginReceive(receivedata, 0, receivedata.Length, SocketFlags.None, receive_callback, client); } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
public override void ResponseMessage(TCPmessage message) { if (domessage != null) { domessage(message); } }
public void ResponseMessage(TCPmessage tcpmessage) { switch (tcpmessage.Command) { case Command.Joinchat: Validjoinchat(tcpmessage.check, tcpmessage.message, tcpmessage.Chatnumber); break; case Command.Outchat: Validoutchat(tcpmessage.check, tcpmessage.Chatnumber, tcpmessage.message); break; case Command.Sendchat: Validsendchat(tcpmessage.message, tcpmessage.Chatnumber); break; case Command.Refreshchatnickarray: Validrefreshchatnickarray(tcpmessage.message, tcpmessage.Chatnumber); break; case Command.Changeroomname: Validchangeroomname(tcpmessage.message); break; } }
public bool requestLogout(string usernickname) { TCPmessage message = new TCPmessage(); message.Command = Command.logout; message.message = json.nicknamecheckinfo(usernickname); return(Send(message)); }
public bool requestPlusfriend(string plusfriendid, string userid) { TCPmessage message = new TCPmessage(); message.Command = Command.Plusfriend; message.message = json.plusidcheckinfo(plusfriendid, userid); return(Send(message)); }
public bool requestFindid(string id, string phone) { TCPmessage message = new TCPmessage(); message.Command = Command.Findid; message.message = json.Findidphoneinfo(id, phone); return(Send(message)); }
public bool requestLogin(string id, string password) { TCPmessage message = new TCPmessage(); message.Command = Command.login; message.message = json.logininfo(id, password); return(Send(message)); }
public bool requestFreshcommand(string usernickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Refresh; message.message = json.nicknamecheckinfo(usernickname); return(Send(message)); }
public bool requestChangeroomname(int chatnumber, string roomname, string usernickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Changeroomname; message.message = json.Changeroomnameinfo(roomname, usernickname); return(Send(message)); }
public bool requestNotBlockfriendcommand(string blocknickname, string blockedid) { TCPmessage message = new TCPmessage(); message.Command = Command.NotBlockfriend; message.message = json.sendjoinchatinfo(blockedid, blocknickname); return(Send(message)); }
public bool requestDeletefriendcommand(string[] removenickarray, string nickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Removefriend; message.message = json.deletenickinfo(removenickarray, nickname); return(Send(message)); }
public bool requestJoin(string id, string password, string nickname, string phone) { TCPmessage message = new TCPmessage(); message.Command = Command.Join; message.message = json.joininfo(id, password, nickname, phone); return(Send(message)); }
public bool requestMakechatcommand(string[] chatnickarray, string nickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Makechat; message.message = json.makechatnickinfo(chatnickarray, nickname); return(Send(message)); }
public bool requestNicknamecheck(string nickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Nicknamecheck; message.message = json.nicknamecheckinfo(nickname); return(Send(message)); }
public bool requestIdcheck(string id) { TCPmessage message = new TCPmessage(); message.Command = Command.Idcheck; message.message = json.idcheckinfo(id); return(Send(message)); }
public void ResponseMessage(TCPmessage message) { switch (message.Command) { case Command.Changeroomname: Validchangeroomname(message.check); break; } }
public bool requestRefreshchatnickarray(int chatnumber, string usernickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Refreshchatnickarray; message.Chatnumber = chatnumber; message.message = json.nicknamecheckinfo(usernickname); return(Send(message)); }
public bool requestSendchatcommand(int chatnumber, string sendusernickname, string Message) { TCPmessage message = new TCPmessage(); message.Command = Command.Sendchat; message.Chatnumber = chatnumber; message.message = json.sendchatinfo(Message, sendusernickname); return(Send(message)); }
public void ResponseMessage(TCPmessage tcpmessage) { switch (tcpmessage.Command) { case Command.Joinchat: Validjoinchat(tcpmessage.check, tcpmessage.message); break; } }
public void ResponseMessage(TCPmessage tcpmessage) { switch (tcpmessage.Command) { case Command.Findid: ValidFindlogininfo(tcpmessage.message, tcpmessage.check); break; } }
public void ResponseMessage(TCPmessage message) { switch (message.Command) { case Command.login: Validate(message.check, message.Usernumber, message.message); break; } }
public bool requestOutchatcommand(int chatnumber, string sendusernickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Outchat; message.Chatnumber = chatnumber; message.message = json.nicknamecheckinfo(sendusernickname); return(Send(message)); }
public bool requestJoinchatcommand(string joinchatid, int chatnumber, string usernickname) { TCPmessage message = new TCPmessage(); message.Command = Command.Joinchat; message.Chatnumber = chatnumber; message.message = json.sendjoinchatinfo(joinchatid, usernickname); return(Send(message)); }
public void ResponseMessage(TCPmessage tcpmessage) { switch (tcpmessage.Command) { case Command.Plusfriend: Validplusfriend(tcpmessage.check, tcpmessage.Usernumber, tcpmessage.message); break; case Command.ReceiveJoinchat: break; } }
public void ResponseMessage(TCPmessage tcpmessage) { switch (tcpmessage.Command) { case Command.Blockfriend: Validblockfriend(tcpmessage.check, tcpmessage.message); break; case Command.NotBlockfriend: Validnotblockfriend(tcpmessage.check, tcpmessage.message); break; } }
private void receive_callback(IAsyncResult ar) { try { client.EndReceive(ar); TCPmessage receivemessage = new TCPmessage(data); ResponseMessage(receivemessage); client.BeginReceive(data, 0, data.Length, SocketFlags.None, receive_callback, null); } catch (Exception e) { Console.WriteLine(e.ToString()); } }
protected bool Send(TCPmessage tcpmessage) { bool ok = false; try { byte[] bytesend = tcpmessage.tobytedata(); client.BeginSend(bytesend, 0, bytesend.Length, SocketFlags.None, send_callback, null); ok = true; } catch (Exception e) { Console.WriteLine(e.ToString()); } return(ok); }
public void ResponseMessage(TCPmessage tcpmessage) { switch (tcpmessage.Command) { case Command.Join: Validjoin(tcpmessage.check); break; case Command.Idcheck: Validid(tcpmessage.check); break; case Command.Nicknamecheck: Validnickname(tcpmessage.check); break; } }
public void ResponseMessage(TCPmessage tcpmessage) { switch (tcpmessage.Command) { // case Command.logout: // Validlogout(); // break; case Command.Removefriend: ValidRemove(tcpmessage.check); break; case Command.Refresh: ValidFresh(tcpmessage.Friendcount, tcpmessage.message); break; case Command.Makechat: ValidMakechat(tcpmessage.message, tcpmessage.check, tcpmessage.Chatnumber); break; case Command.ReceiveJoinchat: Validreceivejoinchat(tcpmessage.check, tcpmessage.Chatnumber); break; } }
public override List <SocketData> responseMessage(Socket socket, TCPmessage receivemessage) { List <SocketData> sendclient = new List <SocketData>(); TCPmessage sendmessage = new TCPmessage(); this.jsonHelp = new JsonHelp(); switch (receivemessage.command) { case Command.login: Dictionary <string, string> logininfo = jsonHelp.getidinfo(receivemessage.message); Dictionary <string, string> logininfo2 = jsonHelp.getpasswordinfo(receivemessage.message); string id = logininfo[JsonName.ID]; string password = logininfo2[JsonName.Password]; bool idcheck = dBhelp.IsexistID(id); bool passcheck = dBhelp.IsExistPassword(password); bool validlogin = dBhelp.validLogin(id, password); if (!idcheck && !validlogin) { sendmessage.check = 0; } if (!passcheck && !validlogin) { sendmessage.check = 1; } if (validlogin) { bool duplicate = false; lock (clientlistinlock) //중복로그인되면 안되니까(이거잘 모르겠다ㅇㅇ) { foreach (Clientdata c in clientlist) //중복로그인 방지 { if (c.id == id) { duplicate = true; break; } } } if (duplicate) //중복로그인 { sendmessage.check = 4; } else { lock (clientlistinlock) { clientlist.Add(new Clientdata(socket, id)); //서버에 login을 했으니 정보를 추가해줘야함 } int usernumber = dBhelp.Getusernumber(id); string nickname = dBhelp.Getnickname(usernumber); sendmessage.Usernumber = usernumber; sendmessage.message = jsonHelp.nickinfo(nickname); sendmessage.check = 2; // java test code } } if (!idcheck && !passcheck) { sendmessage.check = 3; } sendmessage.command = Command.login; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Join: Dictionary <string, string> Joinid = jsonHelp.getidinfo(receivemessage.message); Dictionary <string, string> Joinpassword = jsonHelp.getpasswordinfo(receivemessage.message); Dictionary <string, string> Joinnickname = jsonHelp.getnickinfo(receivemessage.message); Dictionary <string, string> Joinphone = jsonHelp.getphoneinfo(receivemessage.message); string joinid = Joinid[JsonName.ID]; string joinpassword = Joinpassword[JsonName.Password]; string joinnickname = Joinnickname[JsonName.Nickname]; string joinphone = Joinphone[JsonName.Phone]; int joinusernumber = dBhelp.Getjoinusernumber(); if (!dBhelp.IsexistID(joinid)) { dBhelp.join(joinid, joinpassword, joinnickname, joinphone, joinusernumber); sendmessage.check = 1; //회원가입되었다는것을 의미 } else { sendmessage.check = 0; } sendmessage.command = Command.Join; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Idcheck: Dictionary <string, string> idinfo = jsonHelp.getidinfo(receivemessage.message); string checkid = idinfo[JsonName.ID]; if (!dBhelp.IsexistID(checkid)) { sendmessage.check = 1; } else { sendmessage.check = 0; } sendmessage.command = Command.Idcheck; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Nicknamecheck: Dictionary <string, string> nickinfo = jsonHelp.getnickinfo(receivemessage.message); string checknickname = nickinfo[JsonName.Nickname]; if (!dBhelp.Isexistnickname(checknickname)) { sendmessage.check = 1; } else { sendmessage.check = 0; } sendmessage.command = Command.Nicknamecheck; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.logout: Dictionary <string, string> logoutinfo = jsonHelp.getnickinfo(receivemessage.message); string logoutnickname = logoutinfo[JsonName.Nickname]; if (logoutnickname != string.Empty) { string logoutid = dBhelp.Getid(logoutnickname); Clientdata LogoutData = clientlist.Find(x => (x.id == logoutid)); //sendmessage.command = Command.logout; //sendclient.Add(new SocketData(socket, sendmessage)); lock (clientlistoutlock) { clientlist.Remove(LogoutData); } } break; case Command.Findid: Dictionary <string, string> findidinfo = jsonHelp.getidinfo(receivemessage.message); string findid = findidinfo[JsonName.ID]; Dictionary <string, string> findphoneinfo = jsonHelp.getphoneinfo(receivemessage.message); string findphone = findphoneinfo[JsonName.Phone]; if (dBhelp.IsexistID(findid) && dBhelp.Getphone(findid) == findphone) { string findpassword = dBhelp.Findpass(findid); sendmessage.message = jsonHelp.logininfo(findid, findpassword); sendmessage.check = 1; } else { sendmessage.check = 0; } sendmessage.command = Command.Findid; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Plusfriend: Dictionary <string, string> plusidinfo1 = jsonHelp.getidinfo(receivemessage.message); string userid = plusidinfo1[JsonName.ID]; Dictionary <string, string> plusidinfo2 = jsonHelp.getFnickinfo(receivemessage.message); string plusid = plusidinfo2[JsonName.FID]; if (dBhelp.IsexistID(plusid)) // 아이디의 존재유무만 체크했지 아직 친구추가의 중복부분은 처리안함, 그 부분을 서버에서 가지고있어야함 친구목록을 { if (plusid == userid) //추가하려는 아이디가 동일한경우 { sendmessage.check = 2; } else if (!dBhelp.Plusid(plusid, userid)) //이미 친구를 추가한 아이디인 경우 { sendmessage.check = 3; } else { //친구를 추가하려는데, 그 친구가 차단을 한경우, 추가하려는데 이미 차단이 되어있는친구인경우 bool blockplusfriend = dBhelp.Isexistblock(dBhelp.Getnickname(plusid), dBhelp.Getnickname(userid)); bool blockplusfriend2 = dBhelp.Isexistblock(dBhelp.Getnickname(userid), dBhelp.Getnickname(plusid)); if (!blockplusfriend && !blockplusfriend2) //나도 차단은 안했어야 함 { string usernickname = dBhelp.Getnickname(userid); string plusnickname = dBhelp.Getnickname(plusid); dBhelp.plusfriend(userid, usernickname, plusid, plusnickname, 0); //DB에 친구추가 sendmessage.message = jsonHelp.nickinfo(plusnickname); sendmessage.check = 1; } else { string usernickname = dBhelp.Getnickname(userid); string plusnickname = dBhelp.Getnickname(plusid); if (blockplusfriend2) //본인이 차단한경우 { sendmessage.check = 5; } else { sendmessage.check = 4; // 추가하려는 친구가 차단함 } } } } else //아이디가 존재하지 않는 경우 { sendmessage.check = 0; } sendmessage.command = Command.Plusfriend; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Refresh: // 본인이 차단한 사람은 친구목록에서 뜨면 안된다. Dictionary <string, string> refreshinfo = jsonHelp.getnickinfo(receivemessage.message); string refreshnickname = refreshinfo[JsonName.Nickname]; int refreshcnt = dBhelp.Refreshfriendcount(refreshnickname); //nickname의 친구명수 string[] fnickarray = dBhelp.Refreshnickarray(refreshnickname); sendmessage.command = Command.Refresh; sendmessage.message = jsonHelp.Refreshnickarrayinfo(fnickarray); sendmessage.Friendcount = refreshcnt; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Removefriend: Dictionary <string, string> dusernickname = jsonHelp.getnickinfo(receivemessage.message); string rusernickname = dusernickname[JsonName.Nickname]; string[] removenickarray = jsonHelp.getdeletenickarrayinfo(receivemessage.message); for (int i = 0; i < removenickarray.Length; i++) { dBhelp.deletenickarray(rusernickname, removenickarray[i]); } sendmessage.command = Command.Removefriend; sendmessage.check = 1; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Makechat: Dictionary <string, string> makechatnickname = jsonHelp.getnickinfo(receivemessage.message); string musernickname = makechatnickname[JsonName.Nickname]; List <string> makenickarray = jsonHelp.getmakechatnickarrayinfo(receivemessage.message); // 0. 방개설 요청한 닉네임으로부터 현재 친구로 등록되어있는지를 확인 // 1. 요청한 닉네임, 요청당한 닉네임들이 모두 로그인되어있는지를 확인 // 2. chattinglist에서 같은 닉네임들로 형성된 방이 있는지를 체크 // 3. 채팅방 개설 // 4. 초대한 친구들중 차단한 사람이 존재 하는지? // 5. 초대한 친구들중 내가 차단한 사람은 있는지(이거 아직 구현안함,안해도됨) string[] currentFriendlist = dBhelp.Refreshnickarray(musernickname); bool notregistered = false; bool alllogin = true; bool roompossible = false; bool nochatMake = false; for (int i = 0; i < makenickarray.Count; i++) { bool check = currentFriendlist.Contains(makenickarray[i]); if (!check) { notregistered = true; break; } } if (notregistered) //0번의 경우로 채팅방 개설 실패 { sendmessage.check = 0; sendmessage.command = Command.Makechat; sendclient.Add(new SocketData(socket, sendmessage)); } else { //초대한 사람중에 차단한 사람이 존재하는지 -> 이거 그냥 Blockfriendlist쓰면됨(수정다시) for (int i = 0; i < currentFriendlist.Length; i++) { bool blockMakechatcheck = dBhelp.Isexistblock(currentFriendlist[i], musernickname); if (blockMakechatcheck == true) { nochatMake = true; break; } } if (nochatMake) { sendmessage.check = 4; sendmessage.command = Command.Makechat; sendclient.Add(new SocketData(socket, sendmessage)); } else { lock (clientlistinlock) //로그인관련 lock { //1번을 체크(요청당한 닉네임들을 체크) for (int i = 0; i < makenickarray.Count; i++) { bool check = clientlist.Exists(x => x.id == makenickarray[i]); if (!check) { alllogin = false; break; } } if (alllogin) { lock (clientlistoutlock) //로그아웃관련 lock { lock (chattinglistlock) //채팅리스트관련 lock -> 다른곳에서 수정못하게 { bool roomcheck = false; makenickarray.Add(musernickname); int makenickcnt = makenickarray.Count; for (int i = 0; i < chattinglist.Count; i++) { List <string> currentroommembers = chattinglist[i].chatnickarray; int cnt = 0; for (int j = 0; j < currentroommembers.Count; j++) { bool same = makenickarray.Contains(currentroommembers[j]); if (same) { cnt++; } } if (cnt == makenickcnt && currentroommembers.Count == makenickarray.Count) { roomcheck = true; break; } } if (roomcheck) //동일한 채팅방존재 { roompossible = true; sendmessage.check = 2; sendmessage.command = Command.Makechat; sendclient.Add(new SocketData(socket, sendmessage)); } else { //채팅방개설(초대된 닉네임을 매칭시켜서 걔네한테 뿌리면됨 int newchatnumber = 0; newchatnumber = chattinglist.Count + 1; //makenickarray.Add(musernickname); chattinglist.Add(new Chattingdata(newchatnumber, makenickarray)); sendmessage.command = Command.Makechat; sendmessage.Chatnumber = newchatnumber; sendmessage.check = 3; List <Clientdata> tempsend = new List <Clientdata>(); for (int i = 0; i < makenickarray.Count; i++) { string makeid = dBhelp.Getid(makenickarray[i]); Clientdata client = clientlist.Find(x => x.id == makeid); if (client != null) { tempsend.Add(client); } } for (int i = 0; i < tempsend.Count; i++) { sendclient.Add(new SocketData(tempsend[i].socket, sendmessage)); //수신자,(송신자도 포함) 송신 } } } } } else //로그인 모두가 들어오지않음 { sendmessage.check = 1; sendmessage.command = Command.Makechat; sendclient.Add(new SocketData(socket, sendmessage)); } } } } break; case Command.Sendchat: Dictionary <string, string> sendnick = jsonHelp.getnickinfo(receivemessage.message); string sendchatnickname = sendnick[JsonName.Nickname]; Dictionary <string, string> Message = jsonHelp.getmessageinfo(receivemessage.message); string sendMessage = Message[JsonName.Message]; int sendchatnumber = receivemessage.Chatnumber; string sendmessageid = dBhelp.Getid(sendchatnickname); //보낸놈 아이디 sendmessage.command = Command.Sendchat; sendmessage.Chatnumber = receivemessage.Chatnumber; sendmessage.message = jsonHelp.Sendchatinfo(sendMessage, sendchatnickname); lock (chattinglistlock) { // 채팅방찾기 -> 보낼 정보들 가져오기->clientlist에서 찾기(socket정보, 그리고 sendmessage에 같이 담아서 보냄) for (int i = 0; i < chattinglist.Count; i++) { if (sendchatnumber == chattinglist[i].chatnumber) { List <string> sendchatnickarray = chattinglist[i].chatnickarray; for (int j = 0; j < sendchatnickarray.Count; j++) { string sendid = dBhelp.Getid(sendchatnickarray[j]); Clientdata c = clientlist.Find(x => x.id == sendid); if (c != null && sendid != sendmessageid) { sendclient.Add(new SocketData(c.socket, sendmessage)); } } break; } } } break; case Command.Outchat: Dictionary <string, string> Outchatnickname = jsonHelp.getnickinfo(receivemessage.message); string outchatnickname = Outchatnickname[JsonName.Nickname]; int chatnumber = receivemessage.Chatnumber; string outchatid = dBhelp.Getid(outchatnickname); int oidx = -1, idx = -1; TCPmessage outsendmessage = new TCPmessage(); outsendmessage.check = 1; // 방을 나갈사람 outsendmessage.Chatnumber = chatnumber; outsendmessage.command = Command.Outchat; lock (clientlistoutlock) { Clientdata clientdata = clientlist.Find(x => x.id == outchatid); if (clientdata != null) { sendclient.Add(new SocketData(clientdata.socket, outsendmessage)); } lock (chattinglistlock) { for (int i = 0; i < chattinglist.Count; i++) { if (chatnumber == chattinglist[i].chatnumber) //방번호찾기 { oidx = i; List <string> outchattinglist = chattinglist[i].chatnickarray; for (int j = 0; j < outchattinglist.Count; j++) { if (outchatnickname == outchattinglist[j]) { idx = j; //채팅방을 나가는 인덱스 break; } } if (idx != -1) { chattinglist[oidx].chatnickarray.RemoveAt(idx); } break; } } sendmessage.command = Command.Outchat; sendmessage.Chatnumber = chatnumber; sendmessage.check = 0; // 방에 남아있는 사람들 sendmessage.message = jsonHelp.nickinfo(outchatnickname); for (int i = 0; i < chattinglist[oidx].chatnickarray.Count; i++) { string outsendid = dBhelp.Getid(chattinglist[oidx].chatnickarray[i]); Clientdata outc = clientlist.Find(x => x.id == outsendid); if (outc != null) { sendclient.Add(new SocketData(outc.socket, sendmessage)); } } } } break; case Command.Joinchat: Dictionary <string, string> Joinchatid = jsonHelp.getidinfo(receivemessage.message); string joinedchatid = Joinchatid[JsonName.ID]; //초대를 당한놈 Dictionary <string, string> Joinchatnickname = jsonHelp.getnickinfo(receivemessage.message); string joinchatnickname = Joinchatnickname[JsonName.Nickname]; //초대를 하는 사람 int joinchatnumber = receivemessage.Chatnumber; int jidx = -1; if (!dBhelp.IsexistID(joinedchatid)) //아이디가 존재하는지 { sendmessage.check = 2; sendmessage.command = Command.Joinchat; sendclient.Add(new SocketData(socket, sendmessage)); } else if (joinedchatid == dBhelp.Getid(joinchatnickname)) //초대하려는 사람과 초대당하는 사람이 일치하는지 { sendmessage.check = 3; sendmessage.command = Command.Joinchat; sendclient.Add(new SocketData(socket, sendmessage)); } else { lock (clientlistoutlock) { //로그아웃관련lock Clientdata JoinData = clientlist.Find(x => x.id == joinedchatid); Clientdata checkJoindata = clientlist.Find(x => x.id == dBhelp.Getid(joinchatnickname)); if (checkJoindata == null) //초대한놈이 로그아웃됨 { sendmessage.check = 6; sendmessage.command = Command.Joinchat; sendclient.Add(new SocketData(socket, sendmessage)); } else if (JoinData == null) //초대당한놈이 로그아웃됨 { sendmessage.check = 0; sendmessage.command = Command.Joinchat; sendclient.Add(new SocketData(socket, sendmessage)); } else { lock (chattinglistlock) { bool joinno = false; for (int i = 0; i < chattinglist.Count; i++) { if (joinchatnumber == chattinglist[i].chatnumber) { jidx = i; for (int j = 0; j < chattinglist[i].chatnickarray.Count; j++) { if (chattinglist[i].chatnickarray[j] == dBhelp.Getnickname(joinedchatid)) { joinno = true; break; } } break; } } if (joinno) { sendmessage.check = 4; sendmessage.command = Command.Joinchat; sendclient.Add(new SocketData(socket, sendmessage)); } else { if (!dBhelp.Isexistblock(dBhelp.Getnickname(joinedchatid), joinchatnickname) && !dBhelp.Isexistblock(joinchatnickname, dBhelp.Getnickname(joinedchatid))) //로그인이 되어있거나, 친구차단을안했거나 { TCPmessage joinsendmessage = new TCPmessage(); //초대받는 친구에게는 따로 command를 보내야함 joinsendmessage.Chatnumber = joinchatnumber; joinsendmessage.command = Command.ReceiveJoinchat; joinsendmessage.check = 1; sendclient.Add(new SocketData(JoinData.socket, joinsendmessage)); // 초대를 한 당사자는 초대ok된 메시지도 오는거고, 초대가 완료되었다는 메시지도 감 sendmessage.command = Command.Joinchat; sendmessage.Chatnumber = joinchatnumber; sendmessage.message = jsonHelp.nickinfo(dBhelp.Getnickname(joinedchatid)); sendmessage.check = 1; //만약 친구거부를 안했다면, 오케이(아직 자세하게는 예외처리 안함) for (int i = 0; i < chattinglist[jidx].chatnickarray.Count; i++) //기존에 있는방의 멤버들 { string joinsendid = chattinglist[jidx].chatnickarray[i]; Clientdata joinc = clientlist.Find(x => x.id == joinsendid); if (joinc != null) { sendclient.Add(new SocketData(joinc.socket, sendmessage)); } } chattinglist[jidx].chatnickarray.Add(dBhelp.Getnickname(joinedchatid)); //초대당한놈 } else { sendmessage.check = 5; sendmessage.command = Command.Joinchat; sendclient.Add(new SocketData(socket, sendmessage)); } } } } } } break; case Command.Blockfriend: //그냥 DB(test.Blockfriendlist쓰자), 왜냐하면 친구가 구지 아니어도 친구차단을 할수도있으니 Dictionary <string, string> Blockedid = jsonHelp.getidinfo(receivemessage.message); Dictionary <string, string> Blockingnickname = jsonHelp.getnickinfo(receivemessage.message); string blockedid = Blockedid[JsonName.ID]; string blockingnickname = Blockingnickname[JsonName.Nickname]; bool blockcheck = dBhelp.IsexistID(blockedid); if (!blockcheck) { sendmessage.check = 0; sendmessage.command = Command.Blockfriend; } else if (blockcheck && blockedid == dBhelp.Getid(blockingnickname)) //일치하는경우 { sendmessage.check = 2; sendmessage.command = Command.Blockfriend; } else if (dBhelp.Isexistblock(blockingnickname, dBhelp.Getnickname(blockedid))) //이미 기록이 있는경우 { sendmessage.check = 3; sendmessage.command = Command.Blockfriend; } else { sendmessage.check = 1; sendmessage.command = Command.Blockfriend; sendmessage.message = jsonHelp.nickinfo(dBhelp.Getnickname(blockedid)); dBhelp.Blockfriend(blockingnickname, dBhelp.Getnickname(blockedid)); if (dBhelp.Isexistfriend(blockingnickname, dBhelp.Getnickname(blockedid))) //만약 친구목록이 존재한다면 update로 block을 1로 변경 { dBhelp.Updateblock(blockingnickname, dBhelp.Getnickname(blockedid)); //update } } sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.NotBlockfriend: Dictionary <string, string> NotBlockedid = jsonHelp.getidinfo(receivemessage.message); Dictionary <string, string> NotBlockingnickname = jsonHelp.getnickinfo(receivemessage.message); string notblockedid = NotBlockedid[JsonName.ID]; string notblockingnickname = NotBlockingnickname[JsonName.Nickname]; bool notblockcheck = dBhelp.IsexistID(notblockedid); if (!notblockcheck) { sendmessage.check = 0; sendmessage.command = Command.NotBlockfriend; } else if (notblockcheck && notblockedid == dBhelp.Getid(notblockingnickname)) //일치하는경우 { sendmessage.check = 2; sendmessage.command = Command.NotBlockfriend; } else if (!dBhelp.Isexistblock(notblockingnickname, dBhelp.Getnickname(notblockedid))) //이미 해제가 되어있는경우 { sendmessage.check = 3; sendmessage.command = Command.NotBlockfriend; } else { if (!dBhelp.Isexistblockfriend(notblockingnickname, dBhelp.Getnickname(notblockedid))) //친구목록이 없는경우 { sendmessage.check = 1; dBhelp.deleteBlockfriend(notblockingnickname, dBhelp.Getnickname(notblockedid)); //차단해제 sendmessage.command = Command.NotBlockfriend; } else //친구목록이 있는 경우, test.friendlist에서 복구를 해야함 { sendmessage.check = 4; dBhelp.deleteBlockfriend(notblockingnickname, dBhelp.Getnickname(notblockedid)); //차단해제 dBhelp.Updatenotblock(notblockingnickname, dBhelp.Getnickname(notblockedid)); //Block해제 sendmessage.message = jsonHelp.nickinfo(dBhelp.Getnickname(notblockedid)); sendmessage.command = Command.NotBlockfriend; } } sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Refreshchatnickarray: Dictionary <string, string> Refreshchatnickname = jsonHelp.getnickinfo(receivemessage.message); string refreshchatnickname = Refreshchatnickname[JsonName.Nickname]; int refreshchatnumber = receivemessage.Chatnumber; sendmessage.command = Command.Refreshchatnickarray; List <string> refreshchatlist = new List <string>(); lock (chattinglistlock) { for (int i = 0; i < chattinglist.Count; i++) { if (chattinglist[i].chatnumber == refreshchatnumber) { for (int j = 0; j < chattinglist[i].chatnickarray.Count; j++) { if (refreshchatnickname == chattinglist[i].chatnickarray[j]) { continue; } else { refreshchatlist.Add(chattinglist[i].chatnickarray[j]); } } break; } } } sendmessage.message = jsonHelp.Refreshchatnickarrayinfo(refreshchatlist); sendmessage.Chatnumber = refreshchatnumber; sendclient.Add(new SocketData(socket, sendmessage)); break; case Command.Changeroomname: Dictionary <string, string> ChangeRoomname = jsonHelp.getchangeroomnameinfo(receivemessage.message); Dictionary <string, string> Checkoutnickname = jsonHelp.getnickinfo(receivemessage.message); string changeroomname = ChangeRoomname[JsonName.Roomname]; string checkoutnickname = Checkoutnickname[JsonName.Nickname]; int changeroomnumber = receivemessage.Chatnumber; lock (clientlistoutlock) { if (clientlist.Exists(x => x.id == dBhelp.Getid(checkoutnickname))) { sendmessage.command = Command.Changeroomname; sendmessage.message = jsonHelp.roomnameinfo(changeroomname); sendmessage.Chatnumber = changeroomnumber; sendmessage.check = 1; sendclient.Add(new SocketData(socket, sendmessage)); } else { sendmessage.command = Command.Changeroomname; sendmessage.check = 0; sendclient.Add(new SocketData(socket, sendmessage)); } } break; } return(sendclient); }