void FileSocketUpdate() { while (true) { TcpClient client = null; try { client = FileListener.AcceptTcpClient(); new Thread( delegate() { Console.WriteLine("[File Server] 새로운 커넥션"); NetworkStream ns = client.GetStream(); byte[] aa = new byte[4]; ns.Read(aa, 0, 4); int Serverkey = BitConverter.ToInt32(aa, 0); NServerFile file = (NServerFile)NetworkFile.NetFiles[Serverkey]; if (file.is_started) { client.Close(); } file.is_started = true; file.StartEvent(client); } ).Start(); } catch (Exception e) { } } }
/// <summary> /// 인벤토리에 있는 아이템을 바탕으로 해당 클라이언트가 강제로 파일을 다운로드 받도록 만듭니다. /// </summary> /// <param name="no">MYSQL에 등록된 파일 번호입니다</param> /// <param name="user_path">해당 클라이언트에 저장될 경로입니다.</param> /// <param name="open">클라이언트가 다운로드 완료시 파일 자동 오픈을 요청했는지 여부입니다.</param> public bool DownloadItem(int no, string user_path, bool open) { // 인벤토리에 해당 파일이 존재하는지 확인 MysqlNode node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM inventory WHERE student_id=?id AND file_no=?no"); node["id"] = ID; node["no"] = no; using (node.ExecuteReader()) { if (!node.Read()) { ToChatMessage("해당 아이템에 대한 권한이 없습니다.", ChatType.Notice); return(false); } } // 파일 정보 불러오기 node = new MysqlNode(private_data.mysqlOption, "SELECT * FROM file where file_no=?no"); node["no"] = no; using (node.ExecuteReader()) { if (node.Read()) { NServerFile file = new NServerFile(socket, node.GetString("path")); JObject json = new JObject(); json["path"] = user_path; json["open"] = open; // 유저가 파일 열기를 눌렀는 지 여부로 반환해준다. socket.SendFile(json, file); return(true); } } return(false); }
private static void Server_FileInfoReceive(ESocket socket, JObject Message, NetworkFile file) { Console.WriteLine(Message.ToString()); file.Accept("./U" + file.FileName); if (file.FileName == "3.png") { file.End += delegate(NetworkFile file5) { Console.WriteLine("3번 파일 전송 끝"); NServerFile newfile = new NServerFile(socket, "./U7.png"); newfile.Process += delegate(NetworkFile file56) { Console.WriteLine("받은 바이트" + ((double)newfile.FinishByte / (double)newfile.FileSize)); }; socket.SendFile(Message, newfile); }; } }
public void Update() { while (true) { String message = null; JObject json = null; try { message = SR.ReadLine(); if (message == null) { break; } try { json = JObject.Parse(message); if (json["type"] == null) { throw new Exception(); } } catch (Exception e) // 파싱중 에러 발생시 올바르지 않은 패킷이라 판단하고 소켓연결을 종료시킨다. { Dispose(); return; } if (Receive != null) { if ((int)json["type"] == -1) // 처음에 물어보는 과정 (클라 -> 서버 업로드 요청, 서버 -> 클라 다운로드 명령) { NetworkFile file = null; if (this is Client) // 클라이언트단에서 처리하는 메세지 { file = new NClientFile((Client)this, (JObject)json["file"]); } else if (this is UserSocket) // 서버단에서 처리하는 메세지 { file = new NServerFile(this, (JObject)json["file"]); } FileInfoReceive?.Invoke(this, (JObject)json["message"], file); } else if ((int)json["type"] == -2) { if (this is Client) // 클라이언트단에서 처리하는 메세지 { Console.WriteLine((int)json["no"]); NClientFile file = (NClientFile)NetworkFile.NetFiles[(int)json["no"]]; Console.WriteLine(json.ToString()); file.ServerKey = (int)json["serverkey"]; Console.WriteLine((int)file.ServerKey); file.ConnectFileServer(); } //NetworkFile.NetFiles[(int)json["no"]].StartInSender((int)json["serverkey"]); } else { Receive(this, json); } } } catch (IOException e) // e.InnerException.GetType().Name == SocketException { // 소켓통신에서 오류가 발생할경우 커넥션 강제 종료 (Ex 연결이 끊긴경우) break; } } Dispose(); }