topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-NetSprocket.h / h



  /*
       File:       NetSprocket.h
   
       Contains:   Games Sprockets: NetSprocket interfaces
   
       Version:    Technology: NetSprocket 1.7
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1996-2001 by Apple Computer, Inc., all rights reserved.
   
       Bugs?:      For bug reports, consult the following page on
                   the World Wide Web:
   
                       http://developer.apple.com/bugreporter/
   
  */
  ifndef __NETSPROCKET__
  define __NETSPROCKET__
  
  ifndef __CONDITIONALMACROS__
  include <ConditionalMacros.h>
  endif
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __EVENTS__
  include <Events.h>
  endif
  
  ifndef __OPENTRANSPORT__
  include <OpenTransport.h>
  endif
  
  ifndef __OPENTRANSPORTPROVIDERS__
  include <OpenTransportProviders.h>
  endif
  
  ifndef __MACERRORS__
  include <MacErrors.h>
  endif
  
  if PRAGMA_ONCE
  #pragma once
  endif
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  if PRAGMA_IMPORT
  #pragma import on
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=power
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  if TARGET_OS_MAC
  enum {
      kNSpMaxPlayerNameLen        = 31,
      kNSpMaxGroupNameLen         = 31,
      kNSpMaxPasswordLen          = 31,
      kNSpMaxGameNameLen          = 31,
      kNSpMaxDefinitionStringLen  = 255
  };
  
  /* NetSprocket basic types */
  typedef struct OpaqueNSpGameReference*  NSpGameReference;
  typedef struct OpaqueNSpProtocolReference*  NSpProtocolReference;
  typedef struct OpaqueNSpProtocolListReference*  NSpProtocolListReference;
  typedef struct OpaqueNSpAddressReference*  NSpAddressReference;
  typedef SInt32                          NSpEventCode;
  typedef SInt32                          NSpGameID;
  typedef SInt32                          NSpPlayerID;
  typedef NSpPlayerID                     NSpGroupID;
  typedef UInt32                          NSpPlayerType;
  typedef SInt32                          NSpFlags;
  typedef Str31                           NSpPlayerName;
  /* Individual player info */
  
     struct NSpPlayerInfo {
       NSpPlayerID                     id;
          NSpPlayerType                   type;
        Str31                           name;
        UInt32                          groupCount;
          NSpGroupID                      groups[1];
   };
   typedef struct NSpPlayerInfo NSpPlayerInfo;
      
  typedef NSpPlayerInfo *                 NSpPlayerInfoPtr;
  /* list of all players */
  
  struct NSpPlayerEnumeration {
      UInt32                          count;
      NSpPlayerInfoPtr                playerInfo[1];
  };
  typedef struct NSpPlayerEnumeration     NSpPlayerEnumeration;
  typedef NSpPlayerEnumeration *          NSpPlayerEnumerationPtr;
  /* Individual group info */
  
  struct NSpGroupInfo {
      NSpGroupID                      id;
      UInt32                          playerCount;
      NSpPlayerID                     players[1];
  };
  typedef struct NSpGroupInfo             NSpGroupInfo;
  typedef NSpGroupInfo *                  NSpGroupInfoPtr;
  /* List of all groups */
  
  struct NSpGroupEnumeration {
      UInt32                          count;
      NSpGroupInfoPtr                 groups[1];
  };
  typedef struct NSpGroupEnumeration      NSpGroupEnumeration;
  typedef NSpGroupEnumeration *           NSpGroupEnumerationPtr;
  /* Topology types */
  
  typedef UInt32                          NSpTopology;
  enum {
      kNSpClientServer            = 0x00000001
  };
  
  /* Game information */
  
  struct NSpGameInfo {
      UInt32                          maxPlayers;
      UInt32                          currentPlayers;
      UInt32                          currentGroups;
      NSpTopology                     topology;
      UInt32                          reserved;
      Str31                           name;
      Str31                           password;
  };
  typedef struct NSpGameInfo              NSpGameInfo;
  /* Structure used for sending and receiving network messages */
  struct NSpMessageHeader {
      UInt32                          version;                    /* Used by NetSprocket.  Don't touch this */
      SInt32                          what;                       /* The kind of message (e.g. player joined) */
      NSpPlayerID                     from;                       /* ID of the sender */
      NSpPlayerID                     to;                         /* (player or group) id of the intended recipient */
      UInt32                          id;                         /* Unique ID for this message & (from) player */
      UInt32                          when;                       /* Timestamp for the message */
      UInt32                          messageLen;                 /* Bytes of data in the entire message (including the header) */
  };
  typedef struct NSpMessageHeader NSpMessageHeader;
  /* NetSprocket-defined message structures */
  
  struct NSpErrorMessage {
      NSpMessageHeader                header;
      OSStatus                        error;
  };
  typedef struct NSpErrorMessage          NSpErrorMessage;
  
  struct NSpJoinRequestMessage {
      NSpMessageHeader                header;
      Str31                           name;
      Str31                           password;
      UInt32                          theType;
      UInt32                          customDataLen;
      UInt8                           customData[1];
  };
  typedef struct NSpJoinRequestMessage    NSpJoinRequestMessage;
  
  struct NSpJoinApprovedMessage {
      NSpMessageHeader                header;
  };
  typedef struct NSpJoinApprovedMessage   NSpJoinApprovedMessage;
  
  struct NSpJoinDeniedMessage {
      NSpMessageHeader                header;
      Str255                          reason;
  };
  typedef struct NSpJoinDeniedMessage     NSpJoinDeniedMessage;
  
  struct NSpPlayerJoinedMessage {
      NSpMessageHeader                header;
      UInt32                          playerCount;
      NSpPlayerInfo                   playerInfo;
  };
  typedef struct NSpPlayerJoinedMessage   NSpPlayerJoinedMessage;
  
  struct NSpPlayerLeftMessage {
      NSpMessageHeader                header;
      UInt32                          playerCount;
      NSpPlayerID                     playerID;
      NSpPlayerName                   playerName;
  };
  typedef struct NSpPlayerLeftMessage     NSpPlayerLeftMessage;
  
  struct NSpHostChangedMessage {
      NSpMessageHeader                header;
      NSpPlayerID                     newHost;
  };
  typedef struct NSpHostChangedMessage    NSpHostChangedMessage;
  
  struct NSpGameTerminatedMessage {
      NSpMessageHeader                header;
  };
  typedef struct NSpGameTerminatedMessage NSpGameTerminatedMessage;
  
  struct NSpCreateGroupMessage {
      NSpMessageHeader                header;
      NSpGroupID                      groupID;
      NSpPlayerID                     requestingPlayer;
  };
  typedef struct NSpCreateGroupMessage    NSpCreateGroupMessage;
  
  struct NSpDeleteGroupMessage {
      NSpMessageHeader                header;
      NSpGroupID                      groupID;
      NSpPlayerID                     requestingPlayer;
  };
  typedef struct NSpDeleteGroupMessage    NSpDeleteGroupMessage;
  
  struct NSpAddPlayerToGroupMessage {
      NSpMessageHeader                header;
      NSpGroupID                      group;
      NSpPlayerID                     player;
  };
  typedef struct NSpAddPlayerToGroupMessage NSpAddPlayerToGroupMessage;
  
  struct NSpRemovePlayerFromGroupMessage {
      NSpMessageHeader                header;
      NSpGroupID                      group;
      NSpPlayerID                     player;
  };
  typedef struct NSpRemovePlayerFromGroupMessage NSpRemovePlayerFromGroupMessage;
  
  struct NSpPlayerTypeChangedMessage {
      NSpMessageHeader                header;
      NSpPlayerID                     player;
      NSpPlayerType                   newType;
  };
  typedef struct NSpPlayerTypeChangedMessage NSpPlayerTypeChangedMessage;
  /* Different kinds of messages.  These can NOT be bitwise ORed together */
  enum {
      kNSpSendFlag_Junk           = 0x00100000,                   /* will be sent (try once) when there is nothing else pending */
      kNSpSendFlag_Normal         = 0x00200000,                   /* will be sent immediately (try once) */
      kNSpSendFlag_Registered     = 0x00400000                    /* will be sent immediately (guaranteed, in order) */
  };
  
  /* Options for message delivery.  These can be bitwise ORed together with each other,
          as well as with ONE of the above */
  enum {
      kNSpSendFlag_FailIfPipeFull = 0x00000001,
      kNSpSendFlag_SelfSend       = 0x00000002,
      kNSpSendFlag_Blocking       = 0x00000004
  };
  
  /* Options for Hosting Joining, and Deleting games */
  enum {
      kNSpGameFlag_DontAdvertise  = 0x00000001,
      kNSpGameFlag_ForceTerminateGame = 0x00000002
  };
  
  /* Message "what" types */
  /* Apple reserves all negative "what" values (anything with high bit set) */
  enum {
      kNSpSystemMessagePrefix     = (long)0x80000000,
      kNSpError                   = kNSpSystemMessagePrefix | 0x7FFFFFFF,
      kNSpJoinRequest             = kNSpSystemMessagePrefix | 0x00000001,
      kNSpJoinApproved            = kNSpSystemMessagePrefix | 0x00000002,
      kNSpJoinDenied              = kNSpSystemMessagePrefix | 0x00000003,
      kNSpPlayerJoined            = kNSpSystemMessagePrefix | 0x00000004,
      kNSpPlayerLeft              = kNSpSystemMessagePrefix | 0x00000005,
      kNSpHostChanged             = kNSpSystemMessagePrefix | 0x00000006,
      kNSpGameTerminated          = kNSpSystemMessagePrefix | 0x00000007,
      kNSpGroupCreated            = kNSpSystemMessagePrefix | 0x00000008,
      kNSpGroupDeleted            = kNSpSystemMessagePrefix | 0x00000009,
      kNSpPlayerAddedToGroup      = kNSpSystemMessagePrefix | 0x0000000A,
      kNSpPlayerRemovedFromGroup  = kNSpSystemMessagePrefix | 0x0000000B,
      kNSpPlayerTypeChanged       = kNSpSystemMessagePrefix | 0x0000000C
  };
  
  /* Special TPlayerIDs  for sending messages */
  enum {
      kNSpAllPlayers              = 0x00000000,
      kNSpHostOnly                = (long)0xFFFFFFFF
  };
  
  
********************** Initialization ***********************

  
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  NSpInitialize                   (UInt32                 inStandardMessageSize,
                                   UInt32                 inBufferSize,
                                   UInt32                 inQElements,
                                   NSpGameID              inGameID,
                                   UInt32                 inTimeout);
  
  
************************ Protocols *************************

  
  /* Programmatic protocol routines */
  EXTERN_API_C( OSStatus )
  NSpProtocol_New                 (const char *           inDefinitionString,
                                   NSpProtocolReference * outReference);
  
  EXTERN_API_C( void )
  NSpProtocol_Dispose             (NSpProtocolReference   inProtocolRef);
  
  EXTERN_API_C( OSStatus )
  NSpProtocol_ExtractDefinitionString (NSpProtocolReference  inProtocolRef,
                                   char *                 outDefinitionString);
  
  /* Protocol list routines */
  EXTERN_API_C( OSStatus )
  NSpProtocolList_New             (NSpProtocolReference   inProtocolRef,
                                   NSpProtocolListReference * outList);
  
  EXTERN_API_C( void )
  NSpProtocolList_Dispose         (NSpProtocolListReference  inProtocolList);
  
  EXTERN_API_C( OSStatus )
  NSpProtocolList_Append          (NSpProtocolListReference  inProtocolList,
                                   NSpProtocolReference   inProtocolRef);
  
  EXTERN_API_C( OSStatus )
  NSpProtocolList_Remove          (NSpProtocolListReference  inProtocolList,
                                   NSpProtocolReference   inProtocolRef);
  
  EXTERN_API_C( OSStatus )
  NSpProtocolList_RemoveIndexed   (NSpProtocolListReference  inProtocolList,
                                   UInt32                 inIndex);
  
  EXTERN_API_C( UInt32 )
  NSpProtocolList_GetCount        (NSpProtocolListReference  inProtocolList);
  
  EXTERN_API_C( NSpProtocolReference )
  NSpProtocolList_GetIndexedRef   (NSpProtocolListReference  inProtocolList,
                                   UInt32                 inIndex);
  
  /* Helpers */
  EXTERN_API_C( NSpProtocolReference )
  NSpProtocol_CreateAppleTalk     (ConstStr31Param        inNBPName,
                                   ConstStr31Param        inNBPType,
                                   UInt32                 inMaxRTT,
                                   UInt32                 inMinThruput);
  
  EXTERN_API_C( NSpProtocolReference )
  NSpProtocol_CreateIP            (InetPort               inPort,
                                   UInt32                 inMaxRTT,
                                   UInt32                 inMinThruput);
  
  
********************* Human Interface ***********************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API( Boolean , NSpEventProcPtr )(EventRecord *inEvent);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( NSpAddressReference )
  NSpDoModalJoinDialog            (ConstStr31Param        inGameType,
                                   ConstStr255Param       inEntityListLabel,
                                   Str31                  ioName,
                                   Str31                  ioPassword,
                                   NSpEventProcPtr        inEventProcPtr);
  
  EXTERN_API_C( Boolean )
  NSpDoModalHostDialog            (NSpProtocolListReference  ioProtocolList,
                                   Str31                  ioGameName,
                                   Str31                  ioPlayerName,
                                   Str31                  ioPassword,
                                   NSpEventProcPtr        inEventProcPtr);
  
  
******************* Hosting and Joining *********************

  
  EXTERN_API_C( OSStatus )
  NSpGame_Host                    (NSpGameReference *     outGame,
                                   NSpProtocolListReference  inProtocolList,
                                   UInt32                 inMaxPlayers,
                                   ConstStr31Param        inGameName,
                                   ConstStr31Param        inPassword,
                                   ConstStr31Param        inPlayerName,
                                   NSpPlayerType          inPlayerType,
                                   NSpTopology            inTopology,
                                   NSpFlags               inFlags);
  
  EXTERN_API_C( OSStatus )
  NSpGame_Join                    (NSpGameReference *     outGame,
                                   NSpAddressReference    inAddress,
                                   ConstStr31Param        inName,
                                   ConstStr31Param        inPassword,
                                   NSpPlayerType          inType,
                                   void *                 inCustomData,
                                   UInt32                 inCustomDataLen,
                                   NSpFlags               inFlags);
  
  EXTERN_API_C( OSStatus )
  NSpGame_EnableAdvertising       (NSpGameReference       inGame,
                                   NSpProtocolReference   inProtocol,
                                   Boolean                inEnable);
  
  EXTERN_API_C( OSStatus )
  NSpGame_Dispose                 (NSpGameReference       inGame,
                                   NSpFlags               inFlags);
  
  EXTERN_API_C( OSStatus )
  NSpGame_GetInfo                 (NSpGameReference       inGame,
                                   NSpGameInfo *          ioInfo);
  
  
************************ Messaging *************************

  
  EXTERN_API_C( OSStatus )
  NSpMessage_Send                 (NSpGameReference       inGame,
                                   NSpMessageHeader *     inMessage,
                                   NSpFlags               inFlags);
  
  EXTERN_API_C( NSpMessageHeader *)
  NSpMessage_Get                  (NSpGameReference       inGame);
  
  EXTERN_API_C( void )
  NSpMessage_Release              (NSpGameReference       inGame,
                                   NSpMessageHeader *     inMessage);
  
  /* Helpers */
  EXTERN_API_C( OSStatus )
  NSpMessage_SendTo               (NSpGameReference       inGame,
                                   NSpPlayerID            inTo,
                                   SInt32                 inWhat,
                                   void *                 inData,
                                   UInt32                 inDataLen,
                                   NSpFlags               inFlags);
  
  
******************* Player Information *********************

  
  EXTERN_API_C( OSStatus )
  NSpPlayer_ChangeType            (NSpGameReference       inGame,
                                   NSpPlayerID            inPlayerID,
                                   NSpPlayerType          inNewType);
  
  EXTERN_API_C( OSStatus )
  NSpPlayer_Remove                (NSpGameReference       inGame,
                                   NSpPlayerID            inPlayerID);
  
  EXTERN_API_C( OSStatus )
  NSpPlayer_GetAddress            (NSpGameReference       inGame,
                                   NSpPlayerID            inPlayerID,
                                   OTAddress **           outAddress);
  
  EXTERN_API_C( NSpPlayerID )
  NSpPlayer_GetMyID               (NSpGameReference       inGame);
  
  EXTERN_API_C( OSStatus )
  NSpPlayer_GetInfo               (NSpGameReference       inGame,
                                   NSpPlayerID            inPlayerID,
                                   NSpPlayerInfoPtr *     outInfo);
  
  EXTERN_API_C( void )
  NSpPlayer_ReleaseInfo           (NSpGameReference       inGame,
                                   NSpPlayerInfoPtr       inInfo);
  
  EXTERN_API_C( OSStatus )
  NSpPlayer_GetEnumeration        (NSpGameReference       inGame,
                                   NSpPlayerEnumerationPtr * outPlayers);
  
  EXTERN_API_C( void )
  NSpPlayer_ReleaseEnumeration    (NSpGameReference       inGame,
                                   NSpPlayerEnumerationPtr  inPlayers);
  
  EXTERN_API_C( UInt32 )
  NSpPlayer_GetRoundTripTime      (NSpGameReference       inGame,
                                   NSpPlayerID            inPlayer);
  
  EXTERN_API_C( UInt32 )
  NSpPlayer_GetThruput            (NSpGameReference       inGame,
                                   NSpPlayerID            inPlayer);
  
  
******************* Group Management *********************

  
  EXTERN_API_C( OSStatus )
  NSpGroup_New                    (NSpGameReference       inGame,
                                   NSpGroupID *           outGroupID);
  
  EXTERN_API_C( OSStatus )
  NSpGroup_Dispose                (NSpGameReference       inGame,
                                   NSpGroupID             inGroupID);
  
  EXTERN_API_C( OSStatus )
  NSpGroup_AddPlayer              (NSpGameReference       inGame,
                                   NSpGroupID             inGroupID,
                                   NSpPlayerID            inPlayerID);
  
  EXTERN_API_C( OSStatus )
  NSpGroup_RemovePlayer           (NSpGameReference       inGame,
                                   NSpGroupID             inGroupID,
                                   NSpPlayerID            inPlayerID);
  
  EXTERN_API_C( OSStatus )
  NSpGroup_GetInfo                (NSpGameReference       inGame,
                                   NSpGroupID             inGroupID,
                                   NSpGroupInfoPtr *      outInfo);
  
  EXTERN_API_C( void )
  NSpGroup_ReleaseInfo            (NSpGameReference       inGame,
                                   NSpGroupInfoPtr        inInfo);
  
  EXTERN_API_C( OSStatus )
  NSpGroup_GetEnumeration         (NSpGameReference       inGame,
                                   NSpGroupEnumerationPtr * outGroups);
  
  EXTERN_API_C( void )
  NSpGroup_ReleaseEnumeration     (NSpGameReference       inGame,
                                   NSpGroupEnumerationPtr  inGroups);
  
  
************************ Utilities **************************

  
  EXTERN_API_C( NumVersion )
  NSpGetVersion                   (void);
  
  EXTERN_API_C( void )
  NSpSetConnectTimeout            (UInt32                 inSeconds);
  
  EXTERN_API_C( void )
  NSpClearMessageHeader           (NSpMessageHeader *     inMessage);
  
  EXTERN_API_C( UInt32 )
  NSpGetCurrentTimeStamp          (NSpGameReference       inGame);
  
  EXTERN_API_C( NSpAddressReference )
  NSpConvertOTAddrToAddressReference (OTAddress *         inAddress);
  
  EXTERN_API_C( OTAddress *)
  NSpConvertAddressReferenceToOTAddr (NSpAddressReference  inAddress);
  
  EXTERN_API_C( void )
  NSpReleaseAddressReference      (NSpAddressReference    inAddress);
  
  
********************** Advanced/Async routines ***************

  
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API( void , NSpCallbackProcPtr )(NSpGameReference inGame, void *inContext, NSpEventCode inCode, OSStatus inStatus, void *inCookie);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  NSpInstallCallbackHandler       (NSpCallbackProcPtr     inHandler,
                                   void *                 inContext);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API( Boolean , NSpJoinRequestHandlerProcPtr )(NSpGameReference inGame, NSpJoinRequestMessage *inMessage, void *inContext, Str255 outReason);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  NSpInstallJoinRequestHandler    (NSpJoinRequestHandlerProcPtr  inHandler,
                                   void *                 inContext);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  typedef CALLBACK_API( Boolean , NSpMessageHandlerProcPtr )(NSpGameReference inGame, NSpMessageHeader *inMessage, void *inContext);
  if CALL_NOT_IN_CARBON
  EXTERN_API_C( OSStatus )
  NSpInstallAsyncMessageHandler   (NSpMessageHandlerProcPtr  inHandler,
                                   void *                 inContext);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  endif  /* TARGET_OS_MAC */
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=reset
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(pop)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack()
  endif
  
  ifdef PRAGMA_IMPORT_OFF
  #pragma import off
  #elif PRAGMA_IMPORT
  #pragma import reset
  endif
  
  ifdef __cplusplus
  }
  endif
  
  endif /* __NETSPROCKET__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.