home *** CD-ROM | disk | FTP | other *** search
/ Developing for Microsoft …tive Animated Characters / DEV_AGENTA.ISO / Examples / java / hello2 / Hello2J.java < prev    next >
Text File  |  1997-08-20  |  4KB  |  166 lines

  1. //==========================================================================
  2. //
  3. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4. //  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5. //  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6. //  PURPOSE.
  7. //
  8. //  Copyright (C) 1997 Microsoft Corporation.  All Rights Reserved.
  9. //
  10. //--------------------------------------------------------------------------
  11. //
  12. // This sample demonstrates the use of Microsoft Agent from a Java Applet
  13. // and the use of a notification sink to receive callbacks from the Agent
  14. // server.
  15. //
  16. //==========================================================================
  17.  
  18. // Standard java imports
  19.  
  20. import java.applet.*;
  21. import java.awt.*;
  22.  
  23. // COM and Microsoft Agent imports
  24.  
  25. import com.ms.com.Variant;
  26. import agentsvr.AgentServer;
  27. import agentsvr.IAgent;
  28. import agentsvr.IAgentCharacter;
  29.  
  30. // The Hello2J class (Single threaded)
  31.  
  32. public class Hello2J extends Applet
  33. {
  34.     // Private members necessary for Agent instantiation
  35.  
  36.     private IAgent            m_Agent = null;
  37.     private IAgentCharacter    m_Merlin[] = {null};
  38.     private int                m_MerlinID[] = {-1};
  39.     private int                m_RequestID[] = {0};
  40.     private final String    m_CharacterPath = "\\program files\\microsoft agent\\characters\\merlin.acs";
  41.  
  42.     // Declare an Agent Notify Sink so that we can get
  43.     // notification callbacks from the Agent server.
  44.  
  45.     private Notify            m_Sink = null;
  46.     private int                m_SinkID[] = {-1};
  47.  
  48.     private final int        FALSE = 0;
  49.     private final int        TRUE = 1;
  50.  
  51.  
  52.     public Hello2J()
  53.     {
  54.         // Constructor left intentionally blank
  55.     }
  56.  
  57.     public String getAppletInfo()
  58.     {
  59.         return "Name: Hello2J\r\n" +
  60.                "Author: anonymous\r\n" +
  61.                "Created with Microsoft Visual J++ Version 1.1";
  62.     }
  63.  
  64.     public void init()
  65.     {
  66.         resize(0, 0);
  67.     }
  68.  
  69.     public void destroy()
  70.     {
  71.     }
  72.  
  73.     public void paint(Graphics g)
  74.     {
  75.     }
  76.  
  77.     public void start()
  78.     {
  79.         // Start the Microsoft Agent Server
  80.  
  81.         m_Agent = (IAgent) new AgentServer();
  82.  
  83.         // Create and register a notify sink
  84.  
  85.         m_Sink = new Notify();
  86.  
  87.         m_Agent.Register(m_Sink, m_SinkID);
  88.  
  89.         try
  90.         {
  91.             // The filespec parameter of the Load method is a 
  92.             // COM variant to accept alternate Agent data providers.
  93.             // We want a standard provider so we can just specify
  94.             // the filespec for our character.
  95.  
  96.             Variant characterPath = new Variant();
  97.             characterPath.putString(m_CharacterPath);
  98.  
  99.             // Load the character
  100.  
  101.             m_Agent.Load(characterPath,
  102.                          m_MerlinID,
  103.                          m_RequestID);
  104.             
  105.         }
  106.         catch(com.ms.com.ComException e)
  107.         {
  108.             // Hmmm.  We couldn't load the character so what else
  109.             // can we do?
  110.  
  111.             stop();
  112.             return;
  113.         }
  114.  
  115.         try {
  116.  
  117.             // Get the IAgentCharacter interface for the loaded
  118.             // character by passing it's ID to the Agent server.
  119.  
  120.             m_Agent.GetCharacter(m_MerlinID[0],
  121.                                  m_Merlin);
  122.  
  123.             // Give our notify sink access to the character
  124.  
  125.             m_Sink.SetCharacter(m_Merlin[0]);
  126.  
  127.             // Show the character
  128.  
  129.             m_Merlin[0].Show(FALSE, m_RequestID);
  130.  
  131.             // And speak hello
  132.  
  133.             m_Merlin[0].Speak("Hello World!", null, m_RequestID);
  134.  
  135.         }
  136.         catch(com.ms.com.ComException e)
  137.         {
  138.             stop();
  139.         }
  140.     }
  141.     
  142.     public void stop()
  143.     {
  144.         // Unload the character
  145.  
  146.         if (m_MerlinID[0] > 0)
  147.         {
  148.             m_Merlin[0] = null;
  149.             m_Agent.Unload(m_MerlinID[0]);
  150.             m_MerlinID[0] = -1;
  151.         }
  152.  
  153.         // Unregister the notify sink, we're done with the
  154.         // Agent server.
  155.  
  156.         if (m_SinkID[0] > 0)
  157.         {
  158.             m_Agent.Unregister(m_SinkID[0]);
  159.             m_SinkID[0] = -1;
  160.         }
  161.  
  162.         m_Sink = null;
  163.         m_Agent = null;
  164.     }
  165. }
  166.