public void removeMapUser(int map_i, UserThread userThread) { try { if (MapUser2.ContainsKey(map_i) && MapUser2[map_i].Contains(userThread)) { MapUser2[map_i].Remove(userThread); } else { return; } if (MapUser2[map_i].Count > 0) { if (MapUser2[map_i][0].thread.IsAlive) { MapUser2[map_i][0].SW.WriteLine("<map_player>1</map_player>"); // 메시지 보내기 MapUser2[map_i][0].SW.Flush(); } } } catch (Exception e) { write_log(e.ToString()); } }
// 유저 리스트에서 제거한다. public void removethread(UserThread userthread) { try { if (userthread == null) { return; } // 접속이 되지 않은 유저 삭제 : 중간에 팅긴 유저에 대한 처리 if (!userthread.client.Connected) // 접속이 끊겼는데 접속 되어 있다고 처리되서 계속 오류나고 있음 { int map_i = userthread.last_map_id; removeMapUser(map_i, userthread); UserList.Remove(userthread); PlayerCount(); userthread.thread.Abort(); if (userthread.UserName != null) { write_log(userthread.UserName + " 종료"); Packet("<chat1>(알림): '" + userthread.UserName + "'님께서 종료하셨습니다.</chat1>"); Packet("<9>" + userthread.UserCode + "</9>"); } } } catch (Exception e) { write_log(e.ToString()); } }
// Listen New User Connection public void Thread_NetWorkListening() { TcpListener Listener = null; TcpClient client = null; try { Listener = new TcpListener(IPAddress.Any, Int32.Parse(Properties.Resources.PORT)); Listener.Start(); // Listener 동작 시작 while (true) { // Accept New Tcp Client client = Listener.AcceptTcpClient(); // New Client User Thread UserThread userthread = new UserThread(); userthread.mainform = this; userthread.startClient(client); UserList.Add(userthread); if (!MapUser2.ContainsKey(0)) { MapUser2.Add(0, new List <UserThread>()); } MapUser2[0].Add(userthread); } } catch (Exception e) { write_log(e.ToString()); } finally { } }