view Todo.txt @ 507:58c8cccacb27

fix requestupdaterectangle in reciverTask
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 30 Jan 2019 21:50:51 +0900
parents 4accfd4ea9c2
children 59cde26249b1
line wrap: on
line source

Wed Nov 28 18:45:41 JST 2018

   VNCサーバー側が死んだ時にTreeVNCが暴走する Done
   authenticationのポップアップがrootで上がってしまう Done
   SERVER_CHANGE_REQUESTでリクエスト側の画面が消えないことがある
   ディスプレイモードで立ち上げた時にも画面が開いた方が良い
   consolelogをlog4jに切り替える

   Multicast mode
     RFB.readsenddataでmulticastqueueにブロッキングしたデータを挿入する
     multicastqueueをmulticastport に出力するスレッドを作成する
     framebufferをcopyしないでブロッキングするメソッドを作成する
     ReceiveData threadをmulticastportに対して走らせる
     multicastするネットワークインターフェースを選択するUIを作成する


Wed June   8 15:35 JST 2016  kono

   Multi screen でfitScreen buttonは左では動く
   右ではoriginがずれる

   fitScreenをclient側で自動的に実行する
   multi screenのoriginを考慮してfitScreenする

Wed Jan  28 15:35 JST 2015

    < 現状の問題点 >

    安定性の向上

    無線時、切り替えが遅い

    拡大・縮小が遅い done!
        RenderingHint に set する値を、Quality から Speed にする done!
        これを TreeVNC の setting から変更出来るようにする

    FitButton の UI の確認 done!
        -d の場合は常に画面に Fit するように設定 done!

    テストの方法

    linux、win で動くかどうか
        VMWare で確認できる

    catch節で正しい処理ができているか全てチェックする

    TreeVNC起動中にPCを閉じると暴走する (再現しないから後回し)

    log in の方法
        log in 出来るようにする
        log in できなかった場合、メッセージを出す

    複数のネットワークインタフェースがある場合、繋がらないことがある

    途中でネットワークインタフェースを立ち上げるとそれを検知する

    log の情報不足の解決


    < 拡張機能 >

    ルータ越え

    ルータ越えの際の UI の確認

    音声共有

    音声共有の際の UI の確認





Fri Jul  4 19:39:28 JST 2014

    ServerChangeRequest を sub tree 側が、自分向けに換えて、upper tree に送ると、
    中間のtree root経由で、VNC server にリンクが届くので sub tree 側からの画面配信が可能になる。
    ただし、木に loop ができるので、ServerChangeRequest を途中で停める必要がある。
    真の root で停めるという手もあるが、自分の知ってるrootから来たものは上に送らないで良いか?

          r
         / \
        n1   n2
       /\    /\    
      n2 n3 n4  r' = n5
               /\
             n1'  n2'

    n2' send SCR n2'    
    Connect VNC r' -> n2'
    r'  send SCR r'
    Connect VNC  r -> r'
        
              n2' 
             / 
            r' -> n2'
           / \
          r   n1'
         / \
        n1   n2
       /\    /    
      n2 n3 n4  

    r' send SCR r' to n2', n2' do not send SCR to r' becase r' is root of n2'

    こうすれば、FrameBufferUpdate を SeverMessage として送る必要がなくなる。

Thu Jul  3 18:09:37 JST 2014

    interface毎にtreemanagerをつくるので十分。
    subTreeを接続するときにはtreeのnodeにroot modeで直接つなぎにいく。
    これで自動的にlocalのroot managerになる。
    元のtreeとは干渉しない。
    
    sub treeの画面に切り替えることは現状できない。
    切り替えるためには、sub tree側から元のtreeにRfbUpdateを持ち上げなければならない。
    保留。
    
    同じnetworkにいるかどうかはwheretoconnectに変わったnetworkで接続しにきたときのみ対処する。
    
    duplicated rootは、subtreeを自分でつなげることにすれば必要ない。

    殺しきれていないThreadがある。
    
    動かしたままサスペンドすると暴走する。
    サスペンドしたマシンに

    shareボタンを禁止するrootのオプションを、パネルから設定出来るように。

    shareする画面の大きさをHDサイズに限定するのをdefaultにする。
    オプションには定義してあるけれど正しく機能していない。

    checkdelayの機能を。
    木をさかのぼるプロトコル
    上から投げて、下からdelayの時間をあげていく
    途中のnodeですべてのtreeを待ってから

    subtreeからのshareの問題。
    
    無線のみで-dをあげると、client側から接続できない。


Wed Jul  2 18:55:48 JST 2014
    
    TreeRFBProtoのisTreeManagerはnetwork毎に変わる。
    
    clientが立ち上がったときにinterface address毎にTreeManagerを作成する。
    findRootして、既にTreeManagerがいたら、TreeManagerのisTreeManagerフラグを落とす。
    TreeManagerフラグがたっているinterfaceにたいしてはinterface rootとして振る舞う。
        findRootに答える。
        newClientとwhereToConnect、lostParentに応答する。
    真のrootはTreeRfb.isRootで判断する。
    
    newClientが来たら、newClientのnetwork addressをみて、同じネットワークかどうかを判断する。
    同じネットワークにいる場合は、tree nodeとして扱う。
    ネットワークが異なる場合は、順々にtree nodeの下につける。

    FindRootへの応答は、自分がTreeManagerである場合。
    応答を願ったnetwork addressからTreeManagerを検索して、それが合致し、TreeManagerであった場合に応答する。


Fri Jun 27 15:19:39 JST 2014
    
    拡大縮小ボタンのバグを取る。Done!

    Multi-Network-Treeの作成 done!
    socketからNetMaskを検出  done!
    NetworkごとにTreeManagerを作成
    複数のNetworkをもつNodeでは新しいNewtworkにTreeManagerを作成
    FindRootにはTreeMangerが応答する
    下位のNodeのChangeVnCServerはそのTreeManagerが処理する
    上位にHostameがからのChangerVnCserverを投げる
    UpdateRectanleを上位のNetworkに投げる
    RootではUpdateRectangleを送り返す

    myRfbProtoのselectPort()でnetworkinterfaceを検出する
    myRfbProtoのvncConnected()でvnc port の interface と Network を検出する

        自分が、そのnetworkのrootになる条件は?

    treeManagerをnetworkのhashmapで持つ。
    setTreeManagerにnetworkの引数を追加する

    findRootで重複したrootを見つけたときに、
    一番小さいアドレスだけをrootにする。
    それ以外には、duplicated rootを送る。
    この際、duplicated rootを送られたrootは生かしておくが、
    find rootへの応答はやめる。
    lostParentがきたら、find rootへの応答を再開する。
    この際、生かしておくduplicated rootは二つに限る。
    
    findRootReplyにはVNCServerのhostとportを含める。
    両方共nullだった場合は両方別のものとして表示する。
    異なるVNCServerはduplicate扱いしない。

    duplicate root を受け取ったrootは、
    rootであることをやめて、自分の子供にrequestWhereToConnectを送信する。

    requestWhereToConnectを受け取ったnodeは
    whererToConnectを再度送信する。

    中間rootが死んだときには
    下位のnodeはduplicated rootにつなげ直す。
    もしduplicatedListになかったら、あきらめる。

    TreeManager は interface 別に作る Done!
    Network address が LAN 外なら、その下に node は作らない。( そちらで勝手に作るのはあり )


Thu Jun 25 20:55:00 JST 2014
    
    share screenした際に、rootのviewerが消えない。 done!
    殺しきれていないThreadがある。


Thu Jun 19 08:12:02 JST 2014

    Share Button を押した際に、JFrameのTitleを更新する。 Done
    SwingViewerWindow.javaのsetRemoteDesktopName メソッドを呼べば解決するはず。
    
    サーバが切り替わった際、画面のサイズ等の情報を送信する。(INIT_DATA) Done

    -dオプションでviewerを別にあげるのをやめる。done
    2つめのviewerの表示が滞るのをデバッグする
    shareボタンを禁止するrootのオプションを、パネルから設定出来るように。
    shareしたTreeVNCのパネルをinvisibleにする。 done
    shareする画面の大きさをHDサイズに限定するのをdefaultにする。
    fullサイズを転送するオプションに。
    checkdelayの機能を。


Fri Jun 13 17:29:02 JST 2014
    
    AcceptThreadをMultiThread化する。(deadlockを防ぐため)
    TreeNodeが死んだときに、最後のNodeをそこに置き換える。
    clientをつなげたときにscreen sharingするバグを直す。
    無線LAN等の複数のネットワークを使えるようにする。
    無線LAN同士でtreeを構成しないようにパターンマッチをする。

Sat Jun  7 11:47:56 JST 2014

    Multicast で root を探す  (FIND_ROOT)
    その時に、自分の proxy port/host を付けておく
    root は、それを client address/port として覚えておく (clients)
    root は、そこに接続に来て、「自分のproxy  port」を返す。(FIND_ROOT_REPLY)
        これを check box に登録する
    client は、それを選択して、root の proxy port に接続に行く (WHERE_TO_CONNECT)
    そこから、root は、どこに接続に行くかを教えてくれる (CONNECT_TO)
    今度は、そこにclientとして接続する   (VERSION_MESSAGE )

        FIND_ROOT         (client multicast )           :    int port; String hostname  (client's address)

    proxy port への接続では、client は自分から書かずに server からの version message を待つ
    普通のVNCは cliet からは VERSION_MESSAGE が行くが、Tree VNC では、

        FIND_ROOT_REPLY   (root to client proxy port)   :    int port; String hostname  (root's address)
        WHERE_TO_CONNECT  (clinet to root proxy port)   :    int port; String hostname  (client's address)
        CONNECT_TO        (root to client )             :    int port; String parentAddress (parent's address)
        CONNECT_TO_AS_LEADER  (root to client )         :    int port; String parentAddress (parent's address)

    が来ることになる。

    切断時は、子供のleaderが root のproxy port に聞きに行く

        LOST_PARENT            (client to root)         :    int port; String hostname

    root は、接続変更が必要な node の proxy に CONNECT_TO を送る (木経由では送れない。切断されているので)

    最終的な切断時では、 LOST_PARENT が大量に出てしまうはず。なので、CONNECT_TO は連続しては送らない。

    reportLastNode は CONNECT_TO で良い。(10001 port)
    lostNodeConnection でも CONNECT_TO を使う

    LOST_PARENT と PARENT_NOT_FOUND の違いはなんだ? LOST_PARENT は leader が出すようだけど。

    CONNECT_TO で parentNum とか treeNum を送る必要はない。root 内部で接続アドレスから判断する。
    なので、LOST_PARENT  は hostname と port だけでよい。

Fri May 23 19:32:24 JST 2014

    checkdelay を再実装する

    reconnect message が port 10001 を使っているが、これでは複数clientをホストで動かした時に動かない。
    どのportを使うかをrootに教える必要がある。

    9999も使われているようだ。

    普通にclientに接続に行けば、version handshake からスタートするはず。そこに、reconnection プロトコルを
    挟める。MyRfbProto.readVersionMsg()。

    Recconection は 
        root は    AcceptClient
        client は  EchoClient
    で行われている(らしい)。まず、この名前をまともなものにする。

    reconnection は木の最後のノードを穴の空いたところに接続することで行われる。これは、逐次で行う必要がある。
    最後には、ほとんどは一斉に切断されるので、そこで破綻しないように注意する。

    root が client のノードとportを持っているかどうかが重要だが。


Thu May 22 21:20:39 JST 2014

    1) zlibの同期が外れてる。
        VncProxyService.javaのinhelitClients の中で
        resetDecoderを呼び出せばいいが.... 
    2) DesktopSize ではなく、同じプロトコルで initData を送る方が良い。
    2) initData の中の名前を見て、自分だったら、shareしたclientのscreenをhideする。
   

Wed May 22 16:14:25 JST 2014

    1) 10001, 10002 における固定Portをなくす
    2) 木を上に登る通信
    3) ClientをCloseしないでresizeする
    
    Update rectangle で desktop size を変更可能
    このままで、pixel formatが変更されない
    なのでserverInit をもう一度送るのがよいのではないか

    4) display modeでClient view(proxy + view)をあげる

Wed Aug 29 23:32:36 JST 2012

  ReceiverTask の framebufferUpdateMessage を、TreeTask に再現しないとだめ。

Wed Aug 29 22:27:25 JST 2012

  MyRfbProxy の os が初期化されていない (削除する方が良い)

  initData が null ( 設定された時に、設定するべき)