2015년 8월 7일 금요일

ssh 라이브러리 변경

sharpssh 를 사용해서 코드 작성하여 테스트 진행하니 ssh 커넥션에서 실패한다.

정확한 이유는 알수 없지만 ssh2 를 지원하지 않는 듯하다.

그래서 ssh.net 라이브러리를 사용하기로 하였다.


사이트에가서 dll 라이브러리를 다운받자.

프로젝트에 dll 파일을 레퍼런스에 추가하고

namespace를 추가해주자.





이제 접속하는 코드를 작성해 보자.

  public void StartSshStream(App app)
  {
    using (var ssh = new SshClient(m_Config.m_ConnectionSetup.RasberryIP, m_Config.m_ConnectionSetup.Account, m_Config.m_ConnectionSetup.Password))
   {
    ssh.Connect();
                string strCommand = string.Format("java -jar {0}/limelight.jar stream {1} -{2} -{3} -app {4}"
                    ,m_Config.m_ConnectionSetup.LimeLightPath
                    ,m_Config.m_ConnectionSetup.HostIP
                    ,m_Config.m_StreamOption.ScreenResolution.ToString().Replace("RES_","")
                    ,m_Config.m_StreamOption.ScreenFramerate.ToString().Replace("FPS_","") +"fps"
                    ,app.AppName);
                var cmd = ssh.CreateCommand(strCommand);   //  very long list
    var asynch = cmd.BeginExecute(delegate(IAsyncResult ar)
    {
     Console.WriteLine("Finished.");
    }, null);
    var reader = new StreamReader(cmd.OutputStream);
    while (!asynch.IsCompleted)
    {
     var result = reader.ReadToEnd();
     if (string.IsNullOrEmpty(result))
      continue;
     Console.Write(result);
    }
    cmd.EndExecute(asynch);
                ssh.Disconnect();
   }
        }

sshClient 객체를 생성해주고 생성자의 파라미터 값은 ip,id, password string 값을 사용하였다.
다른 생성자 코드는 chm 파일로 제공되는 api 도움말을 참고하자.

connect()로 연결하고 ssh Command를 생성해서 비동기로 실행한다.

동기 방식과 비동기 방식 두가지로 실행 할 수 있지만 Application이 뿌리는 로그나 텍스트를 Catch 해서 처리하기 위해서는 비동기 방식이 적절하다.

Command의 result가 해당 커맨트로 인해 뿌려주는 결과를 string 형식으로 뿌려준다.

streamreader를 하나 생성해서 cmd의 outputstream를 받아 read 할 수 있다.

Command가 종료되면 disconnect 를 해준다.

동일한 방식으로 실행 커맨드 코드와 PC와  pair하는 코드를 작성하였다.

이제 UI 부분의 앱 추가 삭제하는 로직만 작성하면 된다.




댓글 없음:

댓글 쓰기