Ejemplo n.º 1
0
 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)
         {
         }
     }
 }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
 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);
         };
     }
 }
Ejemplo n.º 4
0
 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();
 }