home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 39 / IOPROG_39.ISO / SOFT / sdkjava40.exe / data1.cab / fg_Samples / Samples / DirectX / dplay / SessDlg.java < prev    next >
Encoding:
Java Source  |  2000-05-04  |  5.0 KB  |  224 lines

  1. // 
  2. //  (C) Copyright 1995 - 1999 Microsoft Corporation.  All rights reserved.
  3. // 
  4. //  File:            SessDlg.java
  5. //  Description:                Lets the user pick from existing sessions
  6.  
  7. import com.ms.com.*;
  8. import com.ms.directX.*;
  9. import com.ms.ui.resource.*;
  10. import com.ms.ui.*;
  11. import java.awt.*;
  12.  
  13. class SessInfo extends UIText{
  14.     _Guid    g;
  15.     String    name;
  16. }
  17.  
  18.  
  19. //=-----------------------------
  20. // SessDlg
  21. //=-----------------------------    
  22.  
  23. class SessDlg extends Panel implements IEnumPlayersCallback2,IEnumSessionsCallback2, DirectXConstants{
  24.     
  25.     Label            m_SessionsLabel;
  26.     Label            m_MembersLabel;
  27.     List            m_SessionsList;
  28.     List            m_MembersList;
  29.     Button            m_JoinButton;
  30.     Button            m_CreateButton;    
  31.     int                m_nSessions;    
  32.     DpChat            m_ChatInfo;
  33.  
  34.     SessInfo        m_sessArray[]= new SessInfo[100];
  35.  
  36.     public    boolean    done;
  37.  
  38.     //=-----------------------------
  39.     // constructor
  40.     //=-----------------------------    
  41.     SessDlg(DpChat chatinfo){
  42.         m_ChatInfo=chatinfo;        
  43.         initAll();        
  44.     }
  45.  
  46.     //=-----------------------------
  47.     // DoWait
  48.     //=-----------------------------        
  49.     synchronized int DoWait(){
  50.         try {
  51.             this.wait();
  52.         }
  53.         catch (InterruptedException e){
  54.             return -1;
  55.         }
  56.         return 0;
  57.     }
  58.  
  59.     //=-----------------------------
  60.     // EndWait
  61.     //=-----------------------------        
  62.     synchronized void EndWait(){
  63.         this.notify();
  64.     }
  65.  
  66.  
  67.     //=-----------------------------
  68.     // cleanup
  69.     //=-----------------------------        
  70.     void cleanup(){
  71.         m_ChatInfo=null;
  72.         System.gc();
  73.     }
  74.  
  75.     //=-----------------------------
  76.     // initAll
  77.     //=-----------------------------    
  78.     void initAll(){        
  79.         initUI();
  80.         if (enumSess()==0){
  81.             m_JoinButton.setEnabled(false);
  82.         }
  83.         show();
  84.     }
  85.  
  86.  
  87.     //=-----------------------------
  88.     // initUI
  89.     //=-----------------------------    
  90.     void initUI (){
  91.         //create UI objects
  92.         
  93.         m_SessionsLabel = new Label("Open Chat Sessions");
  94.         m_MembersLabel = new Label("People In Session");
  95.         m_SessionsList = new List();
  96.         m_MembersList = new List();
  97.         m_JoinButton = new Button("Join");
  98.         m_CreateButton = new Button("Create");
  99.                 
  100.         add(m_SessionsLabel);
  101.         add(m_MembersLabel);        
  102.         
  103.         add(m_SessionsList);
  104.         add(m_MembersList);
  105.  
  106.         add(m_CreateButton);
  107.         add(m_JoinButton);
  108.  
  109.         //setBounds
  110.         setLayout(null);
  111.         
  112.         m_SessionsList.setBounds (20,30,180,100);
  113.         m_MembersList.setBounds(210,30,180,100);        
  114.  
  115.         m_SessionsLabel.setBounds(20 ,0,180,20);
  116.         m_MembersLabel.setBounds (210,0,180,20);
  117.         
  118.         m_JoinButton.setBounds(420,30,50,30);
  119.         m_CreateButton.setBounds(420,80,50,30);
  120.     }
  121.     
  122.     
  123.     //=-----------------------------
  124.     // enumSess
  125.     //=-----------------------------    
  126.     int enumSess(){
  127.         DPSessionDesc desc= new DPSessionDesc();
  128.         _Guid sessguid=null;
  129.         String sessName=null;
  130.         String sessPassword=null;
  131.         m_nSessions        =0;
  132.  
  133.         m_ChatInfo.m_DirectPlay2.enumSessions(desc,  sessguid, m_ChatInfo.m_ApplicationGuid,
  134.                 sessName, sessPassword,    0,
  135.                 this, null, DPENUMSESSIONS_AVAILABLE);
  136.  
  137.         return m_nSessions;
  138.     }
  139.  
  140.     //=-----------------------------
  141.     // callbackEnumSessions
  142.     //=-----------------------------    
  143.     public void callbackEnumSessions(DPSessionDesc sessionDesc,
  144.         _Guid instanceGuid, _Guid applicationGuid, String sessionName,
  145.         String password, int[] timeOut, int flags, IUnknown context)
  146.     {        
  147.  
  148.         // see if enum has timed out
  149.         if ((flags & DPESC_TIMEDOUT)!=0){
  150.             // don't try again
  151.             m_ChatInfo.m_DirectPlay2.stopEnumSessions();
  152.             return; //false
  153.         }
  154.  
  155.         SessInfo si = new SessInfo();
  156.         si.g =instanceGuid;        
  157.         si.name=sessionName;
  158.         
  159.         m_SessionsList.add(sessionName);
  160.         m_sessArray[m_nSessions++]=si;
  161.         
  162.  
  163.         return; //true
  164.     }
  165.  
  166.     void DoEnumMembers(_Guid guidInstance){        
  167.         m_MembersList.clear();
  168.         m_ChatInfo.m_DirectPlay2.enumPlayers( guidInstance,
  169.                         (IEnumPlayersCallback2 )this, null, DPENUMPLAYERS_SESSION);
  170.         
  171.     }
  172.  
  173.     public void callbackEnumPlayers(int playerId, int playerType, String playerShortName, String playerLongName, int flags, IUnknown context){
  174.         m_MembersList.add(playerShortName);
  175.     }
  176.  
  177.  
  178.  
  179.  
  180.     //=-----------------------------
  181.     // handleEvent
  182.     //=-----------------------------    
  183.     public boolean handleEvent(Event evt){
  184.         if (evt.id==Event.ACTION_EVENT){
  185.             if (evt.target==m_JoinButton){
  186.                 
  187.                 int i=m_SessionsList.getSelectedIndex();
  188.                 if (i<0){                    
  189.                     return true;    
  190.                 }
  191.  
  192.                 m_CreateButton.setEnabled(false);
  193.                 m_JoinButton.setEnabled(false);
  194.  
  195.                 SessInfo sessinfo = m_sessArray[i];
  196.                 m_ChatInfo.m_SessionGuid=sessinfo.g;
  197.                 m_ChatInfo.m_SessionName=sessinfo.name;
  198.                 done=true;
  199.                 EndWait();                
  200.             }
  201.  
  202.             if (evt.target==m_CreateButton){
  203.                 m_CreateButton.setEnabled(false);
  204.                 m_JoinButton.setEnabled(false);
  205.                 done=true;
  206.                 EndWait();                
  207.                 return true;
  208.             }                            
  209.         }
  210.         else if (evt.id==Event.LIST_SELECT){
  211.             if (evt.target==m_SessionsList){
  212.                 int i=m_SessionsList.getSelectedIndex();                
  213.                 if (i<0)    return true;    
  214.         
  215.                 SessInfo sessinfo = m_sessArray[i];                    
  216.                 DoEnumMembers(sessinfo.g);                        
  217.             }
  218.  
  219.         }
  220.         return super.handleEvent(evt);
  221.     }
  222.  
  223. }
  224.