using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using NLog;
using System.Diagnostics;   // Process

namespace CreateRecvProcess
{
    public class Create
    {
        static Logger log = LogManager.GetLogger("agent_logger");

        // create recv process
        public static bool CreateProcess(String ip, String port, String home_path)
        {
            Process process = new Process();
            bool result = false;

            // process create
            process.EnableRaisingEvents = true;     // process 종료 시 exited 이벤트 발생 시키는지 여부
            process.Exited += new System.EventHandler(ExitedProcess);    // process 종료시 이벤트

            process.StartInfo.FileName = "RecvProject.exe";     // recv process 실행 파일
            Console.WriteLine("ip : " + ip + ", port : " + port);
            process.StartInfo.Arguments = ip + " " + port + " " + home_path;    // 프로세스에 넣어줄 argument 값

            bool isStart = process.Start(); // process start
            if(isStart)
            {
                log.Debug("start process success");
                Console.WriteLine("start process success");
                result = true;
            } else
            {
                log.Debug("start process fail");
            }

            return result;
        }

        static void ExitedProcess(object sender, EventArgs e)
        {
            // recv process exited
            // as 연산자 : 형 변환이 가능하면 형 변환 수행. 불가능하면 null 대입
            Process process = sender as Process;
            log.Debug("recv process id : " + process.Id);
            log.Debug("recv process exit");
        }
    }
}
