WO2000005854A1 - Method for switching protocols transparently in multi-user applications - Google Patents
Method for switching protocols transparently in multi-user applications Download PDFInfo
- Publication number
- WO2000005854A1 WO2000005854A1 PCT/US1999/009289 US9909289W WO0005854A1 WO 2000005854 A1 WO2000005854 A1 WO 2000005854A1 US 9909289 W US9909289 W US 9909289W WO 0005854 A1 WO0005854 A1 WO 0005854A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- connection
- application
- connectivity
- service provider
- computer
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/12—Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/40—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterised by details of platform network
- A63F2300/407—Data transfer via internet
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/50—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
- A63F2300/53—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing
- A63F2300/534—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing for network load management, e.g. bandwidth optimization, latency reduction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/02—Details
- H04L12/16—Arrangements for providing special services to substations
- H04L12/18—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
- H04L12/1813—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast for computer conferences, e.g. chat rooms
- H04L12/1818—Conference organisation arrangements, e.g. handling schedules, setting up parameters needed by nodes to attend a conference, booking network resources, notifying involved parties
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2101/00—Indexing scheme associated with group H04L61/00
- H04L2101/60—Types of network addresses
- H04L2101/604—Address structures or formats
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/131—Protocols for games, networked simulations or virtual reality
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/18—Multiprotocol handlers, e.g. single devices capable of handling multiple protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
Definitions
- the invention relates to network computing and computer connectivity and more specifically to improving performance of multi-user applications for networks.
- a multi-user application refers to an application in which two or more users interact over a network.
- Some examples of multi-user applications include multi-player games, video conferencing and groupware.
- Figure 1 illustrates an example of a network connection formed via the Internet where the user typically establishes a dialup modem connection with an Internet Service Provider.
- each user may be required to launch a copy of the application on the user's computer.
- the multi-user application may run on a central computer on the network with which each user of the multi-user application is in communication.
- the computers participating in the multi-user application communicate according to a network communication protocol.
- Standard communication protocols such as TCP/IP, transfer data in packets.
- TCP/IP the packet is marked with a sequence number, the address of the recipient, and the address of the sender. This addressing information is common in standard protocols so that the protocol can be used for a variety of applications and can be used to address a large number of users.
- multi-player games are implemented on dedicated game servers that remote users can connect to via a direct modem-to-modem connection rather than via the Internet. While these game servers provide enhanced performance, they make it more difficult to coordinate multi- player game sessions because each player must know when to connect to the server and what protocol to use.
- the Internet can serve as an excellent forum to bring users together.
- participants in the session can meet in a virtual lobby hosted on the Internet (or some other wide area network) to establish the time and place for the session.
- a virtual lobby typically hosted on a server called a lobby server on the Internet, is a form of a chat room. Users typically navigate to the virtual lobby with a network browser. Once at the virtual lobby, a user interacts with other users by entering text or cursor device input via the graphical user interface (GUI) of the browser.
- GUI graphical user interface
- players of a multi-player game might "meet" in an Internet game lobby to plan an immediate multi-player game session on a local server outside of the Internet.
- Lobbies with the accessibility advantages of wide area networks like the Internet, can bring thousands of users together to plan multi-user application sessions on smaller networks. Switching to these smaller networks, users of multi-user applications enjoy more efficient communication.
- Figure 1 shows a diagram of the Internet to illustrate the difference between game servers on the Internet and dedicated game servers independent from the Internet.
- Users 20, 22, 24 of multi-user applications can connect to the Internet through Internet service providers 30, 32, 34, meet in an Internet lobby 36, plan a multi-user application session, and then transfer to the application server 38 hosting the application session without disconnecting from the Internet.
- the performance of this type of multi-user application session is not optimal because a large portion of a packet for a wide area network protocol is devoted to addressing.
- message packets are routed through multiple Internet routers 40, 41, 42, 43, 44, 45 as well as an Internet Service Provider before being reassembled for each user.
- the resulting communication is slow and unpredictable, especially for real-time multi-user applications requiring quick responses, such as multi-player games.
- Such multi-user application sessions may be required to slow down to accommodate the inefficient communication.
- a smoother, faster multi-user application session can be achieved by conducting the session on a dedicated multi-user application hub server 50.
- the direct connection to the server 50 bypasses the Internet.
- messages are routed to the hub, and then to another user 20, 22, 24.
- Message packets used to communicate through the smaller network need less space per packet for addressing.
- the resulting communication is more efficient than Internet communication.
- the efficiency advantages of current systems using both lobbies and dedicated application servers are balanced by the disadvantages of having to switch manually between multiple communication protocols and links.
- Figure 2 shows the steps taken by a user following current methods of switching between a lobby and a multi-user application session.
- a user Under existing systems using both a lobby and a dedicated application server, a user must first choose a protocol (60) and establish a connection (61) to a wide area network hosting a lobby, or directly dial a computer hosting a lobby. The user must then find the lobby on the lobby server or network (62).
- each user After planning a multi-user application session with other users in the lobby (64), each user must then disconnect the communication link with the lobby (66), noting the information required to connect to the dedicated application server.
- This information may include protocol information, a network address, and/or a telephone number.
- each user must connect to the dedicated application server using the information from the lobby.
- the protocol followed when establishing this new connection may differ from the protocol used to connect to the lobby. If so, the user must select the proper protocol to use (68) and then make the connection (70).
- Each user must also manually launch a copy of the multi-user application that runs on the user's personal computer (72). The step of manually launching the copy of the application is avoided in a currently available game programming interface called
- DirectPlay ® from Microsoft. However, this is limited to cases where the multi-user application is executed on the existing communication protocol.
- the session commences (74). Information is routed from one user or application to the other users or applications through the dedicated application server.
- each user terminates the application (76) and disconnects from the dedicated application server (78).
- each user To reconnect to the original lobby server, each user must reconnect (61) to the wide area network and visit the lobby, or recall the protocol and phone number for a dial-up lobby.
- Current systems using both a lobby and a dedicated application server require the user to manually connect and disconnect numerous times. Users frequently must remember protocol and address information for the various connections.
- Some application servers provide dedicated lobby servers that do not require a protocol switch from the lobby to the game application. While such dedicated lobby servers do not require the user to keep track of information needed to switch protocols from the lobby to the game application, they are typically specific to one game application. In addition, they are not flexible enough to deal with cases where a protocol change might be necessary to access a computer on another network or to improve performance.
- the invention provides a method for changing communication protocols on a user's local computer from a remote computer.
- This method is "transparent" to the user of the local computer because the remote computer sends connectivity information that enables a software module on the local computer to switch communication protocols without prompting the user for connectivity information. In fact, the user does not have to enter any input to change the protocol.
- An additional advantage of the invention is that it can be implemented so that the application program or programs running on the local computer also do not need to control changes in the communication protocols that they use to communicate with remote computers. For example, in the context of a multi-user application, the version of the multi-user application running on the user's computer does not have to handle the details of switching protocols or restoring the state of a prior connection when the multi-user application session is over.
- the method for changing protocols is executed in a software module called a connectivity application programming interface (API).
- the connectivity API runs on the local computer as well as the remote computers. This module acts as an interface between application programs, on one side, and programs that implement communication protocols called "service providers," on the other side.
- Applications and other programs can establish a connection with a remote computer by invoking the services of the connectivity API and passing it a connectivity address.
- the connectivity address is a data structure with encapsulated address information, including an identifier of a service provider and other connectivity information such as a phone number, IP address, COM port and modem settings, etc.
- the connectivity API sets up a new connection via a service provider, while saving the connection state of an existing connection.
- the connectivity API can be invoked to restore the state of the previous connection.
- These features of the connectivity API enable it to switch and restore the state of a remote connection transparently to the end-user and local applications.
- a remote computer changes the protocol on a user's local computer by invoking the connectivity API on the remote computer to send a connectivity address to the connectivity API on the local computer.
- the local connectivity API stores the state of the existing connection and loads a service provider to set-up a new connection.
- the local connectivity API provides the service provider with the connectivity information necessary to establish a new connection.
- the remote computer can also restore the state of a previous connection by instructing the local connectivity API to recall the stored connectivity state of a previous connection and use this information to restore a connection using a different service provider. Additional features and advantages of the invention will become more apparent from the following detailed description and the accompanying drawings.
- Fig. 1 is a network diagram of a wide area network such as the Internet with a lobby server and an application server.
- Fig. 2 is a flowchart showing the steps taken by the user following prior art methods of switching communication protocols and links.
- Fig. 3 is a diagram illustrating a computer system that serves as an operating environment for an implementation of the invention.
- Fig. 4 is a diagram showing the components of a client computer capable of connecting with a lobby and a dedicated application server using the present invention.
- Fig. 5 is a flowchart showing the steps taken by the user of the present invention.
- Figs. 6A and 6B are diagrams illustrating the operations of a lobby client, lobby server and corresponding connectivity API modules for an initial phase of the game session shown in Fig. 5.
- Fig. 6 A shows the navigation of the lobby client to the lobby server using a service provider for a TCP/IP connection (service provider 1).
- Figure 6B shows the selection of a game application, the launching of the game on the client and the transparent switch to the game protocol (service provider 2) in response to a message from the remote connectivity API.
- Fig. 7 is a diagram illustrating the operation of the client and server game applications and their respective connectivity APIs at the end of a game session when the remote connectivity API restores the state of previous connection on the client.
- the invention is directed to a method for switching communication protocols and links transparently to participants in a multi-player application.
- This method can improve the performance of multi-user applications by reducing latency and improving transmission bandwidth.
- One implementation of the invention is an enhancement to the DirectPlay ® application programming interfaces (APIs) marketed by Microsoft Corporation of Redmond, Washington.
- the DirectPlay ® API is a network connectivity API that enables applications to communicate with each other independent of the underlying transport, protocol or on-line service.
- An implementation of the invention can use the DirectPlay ® interfaces to establish connections according to a variety of different protocols without requiring the user or the application programs to handle the details of the connections. Specifically, the implementation can switch to a higher speed connection on another network and then restore an original connection automatically.
- FIG. 1 and the following discussion are intended to provide a brief, general description of a suitable computing environment in which the invention may be implemented.
- the invention is implemented in program modules comprising executable instructions that run on a computer.
- program modules include routines, programs, components, data structures, etc. that perform particular tasks or implement particular abstract data types.
- the invention may ported to other computer system configurations, including hand-held devices, multiprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, and the like.
- the invention may also be implemented in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network.
- program modules may be located in both local and remote memory storage devices.
- Figure 1 illustrates an example of a computer system that serves as an operating environment for the invention.
- the computer system includes a personal computer 120, including a processing unit 121, a system memory 122, and a system bus 123 that interconnects various system components including the system memory to the processing unit 121.
- the system bus may comprise any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using a bus architecture such as PCI, VESA, MicroChannel (MCA), ISA and EISA, to name a few.
- the system memory includes read only memory (ROM) 124 and random access memory
- RAM random access memory
- BIOS basic input/output system 126
- the personal computer 120 further includes a hard disk drive 127, a magnetic disk drive 128, e.g. , to read from or write to a removable disk 129, and an optical disk drive 130, e.g. , for reading a CD-ROM disk 131 or to read from or write to other optical media.
- the hard disk drive 127, magnetic disk drive 128, and optical disk drive 130 are connected to the system bus 123 by a hard disk drive interface 132, a magnetic disk drive interface 133, and an optical drive interface 134, respectively.
- the drives and their associated computer-readable media provide nonvolatile storage of data, data structures, computer-executable instructions (program code such as dynamic link libraries, and executable files), etc. for the personal computer 120.
- computer-readable media refers to a hard disk, a removable magnetic disk and a CD, it can also include other types of media that are readable by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, and the like.
- a number of program modules may be stored in the drives and RAM 125, including an operating system 135, one or more application programs 136, other program modules 137, and program data 138.
- a user may enter commands and information into the personal computer 120 through a keyboard 140 and pointing device, such as a mouse 142.
- Other input devices may include a microphone, joystick, game pad, satellite dish, scanner, or the like.
- serial port interface 146 is coupled to the system bus, but may be connected by other interfaces, such as a parallel port, game port or a universal serial bus (USB).
- a monitor 147 or other type of display device is also connected to the system bus 123 via an interface, such as a video adapter 148.
- a monitor 147 or other type of display device is also connected to the system bus 123 via an interface, such as a video adapter 148.
- personal computers typically include other peripheral output devices (not shown), such as speakers and printers.
- the personal computer 120 operates in a networked environment using logical connections to one or more remote computers, such as a remote computer 149.
- the remote computer 149 may be a server, a router, a peer device or other common network node, and typically includes many or all of the elements described relative to the personal computer 120, although only a memory storage device 150 has been illustrated in Figure 1.
- the logical connections depicted in Figure 1 include a local area network (LAN) 151 and a wide area network (WAN) 152.
- LAN local area network
- WAN wide area network
- Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.
- the personal computer 120 When used in a LAN networking environment, the personal computer 120 is connected to the local network 151 through a network interface or adapter 153.
- the personal computer 120 When used in a WAN networking environment, the personal computer 120 typically includes a modem 54 or other means for establishing communications over the wide area network 152, such as the Internet.
- the modem 154 which may be internal or external, is connected to the system bus 123 via the serial port interface 146.
- program modules depicted relative to the personal computer 120, or portions of them, may be stored in the remote memory storage device. It will be appreciated that the network connections shown are exemplary and that other means of establishing a communications link between the computers may be used.
- the invention provides a method for transparently switching protocols to improve performance and simplify the user operation and application development of multi-user applications.
- the invention is implemented in a connectivity API that manages connections through a variety of program modules called service providers.
- the service providers contain network specific code necessary to establish a specific type of connection between computers, such as a direct modem-to-modem connection, a serial connection, an Internet TCP/IP connection, and an IPX connection.
- the connectivity API includes an API function for changing protocols on a remote computer. This function causes a copy of the connectivity API on the remote computer to manage the process of setting up a new connection, including changing protocols (if necessary) and also saving the state of an existing connection.
- the connectivity API includes another function for restoring the state of the connection. These functions enable the connectivity API to switch protocols transparently to the user. In addition, they allow an application to change and restore a connection of a remote computer without requiring control from application programs executing on the remote computer.
- the virtual lobby in this example is a program running on a server that acts as a meeting place for participants in a multi-player application, and in particular, a multi-player game.
- the virtual lobby provides a central location on the Internet (or possibly some other network) that users can access to meet other players and initiate a multi-player game session.
- users invoke a program called a lobby client, executing on their computers to make a connection with the lobby server.
- a lobby client executing on their computers to make a connection with the lobby server.
- the lobby server application then invokes a copy of the connectivity API running on the server to send the users' computers the information needed to establish a multi-player game session.
- the connectivity API running in each of the users' computers uses this address information to establish a connection with a game server and set-up a multi-player game session.
- the connectivity API will switch protocols for the multi- player application session and then restore the state of the original connection automatically when the session is terminated.
- FIGS. 4A through 4C are diagrams illustrating the software architecture on a client computer 200, a computer 202 hosting the lobby server, and a computer 204 hosting a multi-player game application, respectively. More specifically, fig. 4A illustrates the program modules in a typical configuration of a client computer 200, the computer of a participant in the multi-player application. Fig. 4B illustrates the program modules in the lobby server 202, a remote computer that each player accesses to coordinate a multi-player game. Finally, Fig. 4C illustrates the program modules in a computer 204 that hosts the multi-player game session.
- the client computer is executing several application programs 210-216, including an application called a "lobby client" 216.
- the client computer 200 has a multi-tasking operating system, namely the Windows ® 95 operating system, which enables the applications 210-216 to execute concurrently.
- the applications 210-214 and the lobby client 216 invoke the services of the connectivity API 218.
- the connectivity API 218 provides a device- independent, and transport independent interface to connectivity services. For example, if an application 210 running on the client computer wishes to send a message to another application running on a remote computer, the application 210 invokes device independent functions of the connectivity API 218 to send the message.
- the connectivity API 218, invokes the services of a connection-dependent service provider (e.g., 220-226) to send the message over a connection medium associated with the service provider.
- a connection-dependent service provider e.g., 220-226
- the service providers 220-226 use device-dependent drivers 230-236 to send data to a remote computer via a hardware device 240 such as a modem or network adapter, or port of the computer such as a serial or parallel port.
- a hardware device 240 such as a modem or network adapter, or port of the computer such as a serial or parallel port.
- the software drivers for devices, such as modems or network adapter cards, are typically available from the device manufacturer.
- the software drivers for serial and parallel ports are usually bundled with the operating system, as in the case of the Windows ® 95 operating system.
- the client computer 200 can establish a connection with the lobby and the game server via a local area network, a direct modem-to-modem connection, or via a wide area network (e.g., through a dial-up connection to the Internet).
- Fig. 4B shows the program modules on the computer 202 that acts as the lobby server.
- the lobby server executes a lobby server application 250, the connectivity API 252, one or more service providers (e.g. , 254), and one or more device drivers (e.g., 256).
- the lobby server application 250 implements the virtual lobby, which users access to coordinate a multi-player game session.
- the structure and function of the connectivity API 252, service provider 254, and device driver 256 are the same as their counterparts on the client computer.
- Lobby servers are typically located on the Internet. In this case, the client computer would likely access the lobby server by establishing a dial-up connection.
- the connectivity APIs 218 and 252 on the respective machines communicate with each other via the same type of service provider (e.g., 220 and 254), which in this case, would be a service provider for a TCP/IP connection.
- the device drivers are specific to the type of hardware used in each machine to connect to the Internet. For example, if the client computer were connected to the Internet via a dial-up connection, the device driver would be a modem driver.
- Fig. 4C shows the program modules executing on the computer hosting the multi-player game application.
- the multi-player game application 260 invokes the connectivity API 262 to send messages to and receive messages from the client versions of the game application (e.g., app. 210 in Fig. 4 A) on the client computers.
- the connectivity API 262 uses a service provider 264 that is specific to a modem-to-modem connection.
- the service provider 264 uses the telephony Application Programming Interface (TAPI) provided with the operating system to perform call control functions and uses the communication APIs provided with the operating system to send and receive messages in serial data stream.
- TAPI telephony Application Programming Interface
- the service provider 264 uses a device dependent modem driver 266 to communicate with a modem 268.
- the Connectivity API-Service Provider Architecture uses a send/receive communication model to implement an API that enables applications in a multi-player game session to communicate with each other.
- Each computer participating in a multi-player game session has the following components: 1) a connectivity API, and 2) one or more service providers.
- the connectivity API provides a common interface to the applications (e.g. , applications - in Fig. 4 A) and hides the details of making connections and sending data over a specific communication medium from the applications.
- the application need only concern itself with the performance of the communication medium. The application does not need to know whether the medium is provided by a modem, network, or on-line service.
- the connectivity API binds with a service provider installed on the user's computer. Specifically, to access the services of the connectivity API, an application invokes a function call in the API to create an instance of a connectivity object and specifies the communication medium. In response, the connectivity API creates an instance of the connectivity object, loads the service provider (if not already loaded) associated with the communication medium and binds the object to that service provider.
- the connectivity object adheres to the COM specification and exposes its functionality via a COM interface. Implemented as Windows ® dynamic link libraries, the service providers bind to the COM object.
- the connectivity API includes an Enumerate function that an application can use to list of all of the service providers installed on the system. This is one of the functions that the connectivity API uses to support several communication transports and protocols. To utilize transport and protocol independent communication services, the application selects a service provider and instructs the connectivity API to create a connectivity object that uses the service provider.
- the connectivity API uses a send/receive communication model to send messages between players.
- the connectivity object maintains a message queue for each player managed by the application.
- An application can manage more than one player.
- the connectivity objects communicate messages to each other. When a connectivity object receives a message, it makes a copy of the message for the message queue of each player for which the message is destined.
- Messages can be sent according to a peer-to-peer or client-server paradigm.
- an application can send a message on behalf of a player to any other player in a multi-player game session.
- One of the client computers is designated as a session host whose purpose is to arbitrate new computers joining a session and to assign ID numbers when new players and groups are created.
- all messages can be sent to a "server" player on a host computer (e.g. , the game server), which forwards the messages to the appropriate "client” players.
- An application can use the connectivity API to send messages among players.
- the application invokes a send message function, implemented as a member function of the connectivity object.
- the application specifies the destination of the message by providing a player ID.
- a message is broadcast to all players of a session by sending the message to a player ID defined by a constant DPID ALLPLAYERS.
- the coimectivity API also uses messages to set-up and to restore remote connections.
- the connectivity API includes functions to instruct a remote copy of the connectivity API to create a new connection and to restore the state of a former connection.
- the connectivity API on one computer sends a message to the connectivity API on another computer, instructing the second connectivity API to change a connection.
- the connectivity API provides an address with the message that includes the information necessary to establish the new connection.
- the connectivity API that originates the message can provide an ID of the previous connection that it wishes to restore.
- the connectivity API that receives this message will restore the immediate, prior connection.
- the connectivity API cannot establish a new connection according to a message from a remote connectivity API
- the local connectivity API reverts to the original connection it had with the remote connectivity API. If the local connectivity API is successful in resuming the original connection, it reports the failure to establish the new connection to the remote connectivity API in another message.
- the application programs do not get involved in the process of changing protocols. Instead, this process is transparent to the applications and is handled entirely within the connectivity API.
- the messages sent between the connectivity API running on the respective computers are not sent to or processed by the application programs that use the connectivity API's services.
- the connectivity API manages multi-player applications in terms of sessions, players, and groups. Each of these terms is described further below.
- a “session” is an instance of several applications on remote machines communicating which each other.
- An application uses session-management functions of the connectivity API to open or close a communications channel.
- An application either creates a new session or enumerates existing sessions and finds one to connect to.
- the application that creates the session is referred to as the "host” .
- the host assigns player and group ID numbers and regulates new applications joining the session.
- the connectivity API includes a member function called EnumSessions that enables an application to locate all the existing sessions in progress on the network.
- the Open member function is used to create a new session or connect to an existing one.
- a session is described by its corresponding data structure called DPSESSIONDESC2.
- This structure contains application-specific values and session particulars such as the name of the session, an optional password for the session, and the number of players to be allowed in the session.
- an application can call the GetCaps member function to retrieve the speed of the communications link and other properties of the network and service provider.
- an application wishes to leave a session it can use the Close member function. If the session host leaves the session, the host will migrate to one of the other players in the sessions and generate a DPSYS_HOST system message.
- An application uses player-management functions in the connectivity API to manage the players in a session. In addition to creating and destroying players, the application can enumerate the players or retrieve a player's communication capabilities. Functions called CreatePlayer and DestroyPlayer create and delete players in a session. The connectivity API assigns the player a Player ID. Applications and the connectivity
- API use the Player ID to route message traffic.
- An application uses the EnumPlayers member function of the connectivity API to discover what players are in a current session and their friendly and formal names. This function is typically called immediately after a call to the Open member function that joins an existing session. It can also be used when the application needs to iterate through all the players in a session.
- a function called GetPlayerCaps retrieves information about the speed of a player's connection to the session.
- Group Management The group-management functions of the connectivity API allow applications to create groups of players in a session. An application can then use a single call to the Send member function to send messages to an entire group, rather than to one player at a time. Some service providers can send messages to groups more efficiently than sending them to the individual players in the group (multicasting), so in addition to simplifying player management, groups can be used to conserve communication channel bandwidth.
- the CreateGroup and DestroyGroup member functions of the connectivity API create and delete a group of players.
- the connectivity API assigns a Group ID to the group.
- the group is initially empty; the application uses the AddPIayerToGroup and DeletePlayerFromGroup member functions to control the membership of the group.
- the application can call the EnumGroups member function.
- the application can call the EnumGroupPlayers member function.
- the connectivity API provides message-management functions that allow an application to route messages between players.
- the application can use a Send member function to send a message to an individual player, to a group, or to all the players in the session, by specifying a player ID, a group ID, or DPID ALLPLAYERS for the destination.
- An application can call GetCaps to find out the maximum number of bytes that can be sent in a single packet. Larger messages are sent using several packets.
- a Receive member function This function allows the application to specify whether to retrieve the first message in the queue, only the messages TO a particular player ID, or only those FROM a particular player ID.
- the application can use the GetMessageCount member function to retrieve the number of messages waiting for a given player.
- the connectivity API generates system messages that are used to notify players of changes in the session. System messages are FROM a virtual player defined by the following ID: DPID_SYSMSG.
- the application can control what system messages are generated through the use of flags in a data structure called SESSIONDESC2 structure.
- Service providers are program modules that include network specific code used by the connectivity API to communicate over a network.
- the service providers include code needed to send and receive messages over a specific connection medium.
- the connectivity API is responsible for managing the session and the players and groups in that session. It is also responsible for generating or directing messages, and responding to messages.
- the service provider acts as a transport to send a message from one computer to another at the request of the connectivity API.
- service providers are implemented as Windows dynamic link libraries (DLLs).
- DLLs Windows dynamic link libraries
- service providers include a service provider for direct modem-to-modem connections, a service provider for a serial connection, a service provider for an Internet TCP/IP connection, and a service provider for an IPX connection.
- the service providers in the current implementation are implemented using components of the Windows ® 95 operating system.
- the direct modem-to-modem connection is implemented using TAPI for call control functions and using the communication APIs in Win32 ® API.
- the service provider for the TCP/IP connection includes the implementation of the service provider interface functions (as described in this specification), which communicate with Winsock, the sockets application programming interface in the Windows ® Operating System.
- Winsock communicates with a TCP/IP stack, which in turn communicates with either a modem or network device driver.
- Winsock and the TCP/IP stack are provided with the Windows ® Operating System.
- the device drivers are typically provided by the device manufacturer.
- the compiled DLL representing the service provider is copied to the Windows SYSTEM directory
- the parameter name_of_service_provider is the name of the service provider as it appears in the list that the user can select from when choosing a service provider.
- the name will be passed to SPInit in the IpszName parameter.
- the parameter Guid is a unique number of the service provider. This will be passed to SPInit in the IpGuid parameter.
- the Path parameter is the name of the DLL which implements this service provider.
- the parameter address_type_guid represents one or more GUIDs indicating what address type(s) this service provider uses to locate a session on the network. If no network address is needed, then this key is not required, (e.g. Internet TCP/IP needs an IP address so the GUID DPAID INet is created as a key. The format of these addresses is described in more detail below.)
- the connectivity API interacts with the service provider through the service providers programming interface. An implementation of this interface includes the functions summarized below.
- the connectivity API has a COM interface called IdirectPlaySP that service providers can access to invoke services of the connectivity API.
- IdirectPlaySP COM interface
- the structure of a message from the connectivity API includes a message body supplied by the connectivity API and a message header.
- the message header is a portion of the message that the service provider can reserve to fill in additional information, such as an address.
- the connectivity initializes a service provider, the service provider can return a parameter to indicate the size of the message header. This parameter specifies the size of the message header in bytes.
- the connectivity API requests the service provider to send a message, it will leave the specified number of bytes open at the beginning of a message buffer so that the service provider can use this portion of the message structure as a header. Note that the service provider does not have to add any header to the message if no header is necessary to route the message to the intended recipient. This allows the service provider to maximize the use of the transmission bandwidth for sending data from the application, as opposed to sending address information.
- the connectivity API uses an encapsulated address format to represent network address information.
- the connectivity API wishes to create a session, it provides the encapsulated address information to a specified service provider.
- the encapsulated address provides all of the information that the service provider needs to establish a connection.
- connectivity address is made up of a series of chunks. Each chunk consists of the following:
- a service provider When a connectivity address, it parses it for useful information and saves it in a data structure such as a subkey in the registry of the Windows ® operating system.
- the connectivity address is preferably stored as a subkey to the key used to register the service provider in the registry. This method of storing the connectivity address is advantageous because it provides an effective way to ensure that the address is removed when the service provider is de-installed. Specifically, when the service provider is de-installed, the operating system removes its key in the registry, and all of the subkey s associated with its key.
- the service provider can then use the EnumAddress function of the connectivity API to parse individual chunks.
- the service provider presents a dialog box asking the user for more information only if the information in the connectivity address is incomplete.
- One implementation of the connectivity address has predefined the following chunk identifiers:
- the connectivity API uses this address to control transparent protocol switching on a remote computer.
- an application invokes a RemoteConnect function and passes a connectivity address and the destination address of the connectivity API
- the connectivity API sends a message to the connectivity API specified in the destination address along with the connectivity address.
- the connectivity API at the destination then uses the connectivity address to establish a new connection with the newly specified service provider.
- the connectivity API includes a programming interface that enables lobby-related programs to interact with multi-user applications that use the connectivity API.
- lobby software provides a matchmaking function to coordinate multi-player application sessions.
- the lobby-related functions in the connectivity API enable lobby software to initiate a multi-player session automatically.
- the lobby software can use the functions in the connectivity API to switch protocols, launch an application, and add the application to a multi-player session.
- the lobby software includes the lobby client and the lobby server application.
- the lobby client runs on the user's computer and provides a user interface through which the user can access a "virtual lobby" and locate other user's to engage in a multi-player application session.
- the virtual lobby is most commonly used to plan multi-player game sessions.
- the lobby server application is a program that hosts the lobby, nrnning on a lobby server.
- the lobby server may be a permanent server that the client computer communicates with via a direct modem-to-modem dialup connection.
- the lobby server may be located on a network, such as a site on the Internet or a peer computer acting as the lobby server on a peer-to- peer network.
- the connectivity API includes functions that the lobby client can use to initiate a multi- player application session. Once a group of players have decided to start a session, the lobby client can invoke functions in the connectivity API to launch an application and provide it with information needed to select a service provider and connect to the session. In addition, the lobby server can use the Remote connection function to connect an application to a multi-player application session.
- the connectivity API includes functions to allow the lobby client to interact with and determine information about applications that are written for the connectivity API ("compatible applications").
- the lobby client can determine which compatible applications are installed on the client computer through a function called EnumLocal Applications. It can also determine what service providers are available through a function called DirectPlayEnumerate.
- the lobby server application can use the RemoteConnect function to switch protocols transparently.
- the lobby server application can invoke the RemoteConnect function and pass the connectivity address needed to connect the client computer to multi-user application session.
- Multi-user Applications In a multi-user application session, there is a version of a multi-user application on each of the user's computer. In a peer-to-peer paradigm, one of the applications acts as the host of the session. In a client-server paradigm, there is an application that acts as a server and all other participating applications are clients to this server.
- Fig. 4C shows the program modules relevant to this example on a game server.
- the software executing on the server includes the multi-player game application, the connectivity API, a service provider, and a device driver.
- the game server is preferably a dedicated server that the client computer of each game participant connects to via a direct modem- to-modem connection.
- the connectivity API can use a variety of different types of service providers, it is possible that the client computers will use another communication medium to connect to the multi-player application session. In fact, it is possible that some client computers involved in a session will use a different communication medium than other client computers in the same session.
- the host of the multi-player game session does not have to be based on a client-server model where each user is a client and the host application executes on a game server.
- the multi-player game can be based on a peer-to-peer paradigm, and one of the player's computers can also act as the host of the game session.
- the invention simplifies the operation of multi-player games from the standpoint of the user because it eliminates the requirement that the user manually change communication protocols when entering or exiting a multi-player game session.
- the invention reduces or eliminates the need for input from the user when switching between the communication protocols for the lobby and the multi-user application session.
- the invention allows the user to enjoy better game performance without the inconveniences of switching protocols manually.
- Figure 5 is a flow diagram showing the steps that are initiated or performed by a user in a lobby application that uses the connectivity API to initiate a multi-player game session. The operation of the connectivity API and service providers are detailed in the next section.
- the user Before entering a multi-player game session, the user begins by visiting the lobby. To visit the lobby, the user launches a lobby client on the client computer (300). For a Windows-based application, this is typically accomplished by using the mouse to click on the lobby client application.
- a lobby client application is an Internet browser such as the Internet Explorer browser from Microsoft Corp.
- the user connects to a lobby by selecting the lobby through the user interface of the lobby client (302).
- the user can make subsequent connections to the lobby by merely choosing the lobby without entering any address information. For example, the user might click on an icon that initiates a connection process using stored protocol and address information.
- the connectivity API manages the details of switching communication links and protocols, launching the application on the client, establishing a connection to the application server, and opening a multiuser application session.
- the user engages in a multi-user application session (306).
- the user closes the application or otherwise indicates that the session is over (308).
- the connectivity API manages the details of closing the session, terminating the connection to the application server, and re-establishing a connection to the lobby.
- the return arrow 310 in Fig. 5 represents that the connectivity API restores the user's connection to the lobby and returns the user to the lobby. Now returned to the lobby, the user can plan another multi-user application session by finding a new group of users, a new application, and/or a new application server. If the user wishes to exit the lobby, the user can navigate to some other site on the Internet or terminate the lobby client.
- FIGs 6A-B and Figure 7 are block diagrams illustrating the operation of the remote connection and restore functions using the example provided in Figure 5.
- Figures 6 A and 6B illustrate how a lobby server uses the remote connection function to switch the client computer's physical connection and communication protocols from the lobby server to the game server.
- Fig. 6 A shows the operations of the lobby client, the connectivity API and the service provider for the TCP/IP connection (Service provider 1) in three separate columns. Each of these components is in the client computer.
- Fig. 6 A begins at the point where the operating system has launched the lobby client in response to a user request.
- the lobby client begins by performing some preliminary steps to initialize the connectivity software in the user's computer.
- the lobby client calls LobbyCreate (400) to create a lobby object.
- the lobby client calls a LobbyCreate function in the connectivity API (namely, the DirectPlay Lobby Interface).
- the connectivity API creates an instance of a lobby object (402) and returns a pointer to this lobby object (404).
- the lobby object provides an interface through which lobby-related APIs can be called.
- the lobby client creates a connectivity object by invoking the DirectPlayCreate function (406) in the connectivity API.
- the lobby client passes a connectivity address (408) to the connectivity API when it invokes this function.
- the connectivity address includes the address information needed to establish a remote connection via the service provider.
- the connectivity API creates an instance of a connectivity object (410) and returns a pointer to the object.
- the connectivity API invokes the SPInit function of the service provider to initialize the service provider (412).
- the service provider parses the connectivity address data (414) and stores it for future use (416).
- the service provider also makes sure that it has the resources that it needs (e.g., the hardware and software and communication protocols) and loads the communication protocol (418).
- the service provider fills in a data structure with the pointers to the functions that it has implemented (e.g. , a function table) 420, the version number, and the message header size (422).
- the service provider is the service provider for a TCP/IP connection.
- This service provider implements the TCP/IP protocol.
- the lobby client performs functions that enable the user to visit the lobby server.
- the lobby client acts as a network browser. It performs conventional network browsing functions to access the lobby server application (424).
- Fig. 6B illustrates the operation of the lobby client and client connectivity API on the left, and the server connectivity API and lobby server application on the right.
- the dashed line separates the client and server software components and represents the communication medium used to communicate between the connectivity APIs of the client and server, namely, the TCP/IP connection and the TCP/IP service providers on each computer.
- the lobby client and lobby server establish a connection with each other via the TCP/IP protocol (426, 428).
- the lobby client sends data to and receives data from the lobby server application to enable the user to coordinate a game session.
- the lobby client gets a list of the game identifiers (IDs) (430) by requesting them from the lobby server application via the TCP/IP connection.
- the lobby server sends the application identifiers (432).
- the lobby client When the user selects a game application and a game server (434), the lobby client sends a message to the lobby server application, specifying the application and the server that the user has selected (436).
- the lobby client invokes the RunApplication method of the lobby object on the client computer (the local user's computer)(438) and passes the lobby object the application identifier (an application GUID).
- the application identifier is a universally unique identifier assigned to the game application program. This causes the lobby object to launch the game application on the user's machine (440) by identifying the application
- the lobby server application invokes the RemoteConnect function of the connectivity API on the computer hosting the lobby server application (442).
- the connectivity API on the lobby server sends a system message to the connectivity object on the client (444).
- This system message includes a connectivity address with address information identifying the service provider, the telephone number of the game server, and call control data (COM port, baud rate, no. of stop bits, parity and flow control).
- the message also includes the application identifier of the game.
- the connectivity object on the user's computer saves the state information of the current connection (446), and creates a connectivity object on behalf of the game application (448).
- the connectivity API initializes the service provider identified in the connectivity address provided in the system message (450).
- the connectivity API then connects the game application to a session using the Open function on the connectivity object (452).
- the connectivity API only connects the game application to the session if the game application has the focus, meaning that the main window of the game application in the windowing interface of the Windows ® operating system is active and responsive to user input. It is important to emphasize that the service provider (sp.
- the service provider used to connect to the game session will use a different protocol than TCP/IP.
- the protocol that the service provider uses for the game session does not have to have any address header and this helps to maximize the amount of bandwidth for application data.
- the game application on the game server is connected to the game session via the connectivity API and service provider.
- the connectivity API and service provider on the game server enable the game application to communicate with the client computers involved in the session in the same manner that they communicate with it. Specifically, each of the participating applications communicate using the send/receive communication model explained above.
- the connectivity API enables an application to restore the state of a user's connection when the game application is no longer participating in the game session. Specifically, the host game application on the server can invoke the RestoreConnection function to restore the connection of a user's computer.
- Fig. 7 is a block diagram continuing the example of Figs. 6 A and 6B. Fig.
- the dashed line represents the communication medium, including the physical connection between the computers and the service providers on each computer.
- the service providers used to communicate between the connectivity APIs an each computer are service providers that implement a communication protocol optimized for the game application.
- the messages passed between the game applications in the session require little or no header for message routing purposes because they are dedicated to the game application.
- the physical connection between the game server and the client is preferably a direct modem-to-modem serial connection, as opposed to the slower TCP/IP connection between the client and lobby server on the Internet.
- the service provider in use on the client computer is the one that was initialized in block
- the game server also has a version of the same service provider to pass messages to the client on the serial communication link.
- the game application and the game server communicate by invoking the send and receive functions of the connectivity API.
- the connectivity API calls the send function of the service provider to instruct it to send the message.
- the service provider sends the message without adding any data (e.g., a header for routing purposes).
- the connectivity API retrieves messages queued for the application.
- Fig. 7 generally shows the interaction between the connectivity APIs during normal game play.
- Block 460 represents calls from the client game application to the connectivity API on the client, and block 462 represents operations of the connectivity API.
- block 464 represents calls from the game server application to the connectivity API
- block 466 represents operations of the connectivity API on the server.
- the connectivity API sends a message to the game server indicating that the client application has entered a shut-down process.
- the game server can invoke the RestoreConnection function on its connectivity API to restore the previous connection on the client (468).
- the connectivity API sends a system message to the connectivity object on the client computer (470).
- the client connectivity object uses the state information that it has stored in an MRU list to restore the state of the connection. Specifically, it takes the connectivity address stored in response to the RemoteConnect function from the MRU stack (472), shuts down the current service provider (sp.
- the connectivity object In creating the connectivity object, it initializes the service provider (sp. 1) from the previous connection (478).
- the connectivity address includes the service provider GUID, the application GUID of the lobby client, the telephone number of the Internet service provider, and the URL of the lobby.
- the connectivity API posts a message for the lobby client to provide it with a pointer to the new connectivity object established for the TCP/IP connection (480).
- the connectivity API also includes code to restore the state of a previous connection when a game application loses the focus or terminates. This is implemented as a user-settable option in the connectivity API that the game application program can expose to the user in the form of a dialog box. The user can set the connectivity API to restore the state of a previous connection when the application program terminates, loses the focus, or loses the focus and some specified period of time elapses after loss of the focus.
- the connectivity API monitors the state of the focus in the operating system.
- the connectivity API determines whether the application program has the focus through its window handle, which is an identifier referring to an application program's user interface window.
- window handles the connectivity API monitors for changes in focus by intercepting messages from the operating system destined for an application's window (482).
- the connectivity API hooks messages corresponding to user input from the operating system to the application's window (484). These messages indicate which application is active and currently responsive to user input.
- An alternative way of monitoring for changes in focus is to use operating system services of the Windows ® Operating System, namely a shell hook, to receive notifications about changes in focus from one application to another.
- the process of monitoring for termination of the application is similar in that the operating system signals an event indicating that the application has terminated or failed.
- the connectivity API monitors for this event hooking messages from the operating system.
- the connectivity API detects that the game application has lost the focus or is terminated (and the restore option is enabled)
- it will restore the state of the previous connection, which it has stored in a most-recently-used stack (MRU) (See blocks 472-480 in Fig. 7).
- MRU most-recently-used stack
- the connectivity API proceeds to restore the previous connection, using the connectivity address stored in the MRU stack.
- the lobby client in the above-scenario is an Internet browser accessing a lobby server at a Web site on the Internet.
- the lobby client is the Internet browser, and the lobby is implemented at a Web server on the Internet.
- the browser creates a lobby object and a connectivity object so that its counterpart connectivity object running on the Web server can communicate with it via the message model of the connectivity API.
- the browser needs to create a connectivity object on the client so that the lobby server can invoke functions of the connectivity API remotely.
- the lobby server application can also be implemented on a web page using a scripting language like Visual Basic ® Script from Microsoft Corp.
- a scripting language like Visual Basic ® Script from Microsoft Corp.
- One possible implementation is to implement the connectivity object of the lobby server as an ActiveX control and the lobby itself as a Web page stored on the Web server.
- the ActiveX control is a program module (either a dynamic linked library or executable program) implemented to comply with the Component Object Model (COM) specification.
- COM Component Object Model
- the interaction between the server connectivity object (the ActiveX control) and the client connectivity object occurs when the browser executes the script in the lobby web page.
- the browser executes the script code that invokes the RemoteConnect function through the Active X control interface.
- the ActiveX control on the client sends a system message to the client connectivity object.
- the client connectivity object then handles the switching of protocols as described above and illustrated in Fig. 6B.
- This method is called to change the protocol and address that a remote client is using to communicate.
- Pointer to the start of the DirectPlay address buffer representing the new address to be switched to.
- This address is in the context of the service provider specified by lpguidNewSp. dwDpAddressSize
- the size, in bytes, of the address data is the size, in bytes, of the address data.
- the invention provides a method for switching communication protocols between a client computer and remote computers.
- the method establishes a first connection with a first remote computer according to a first communication protocol.
- a first process executing on the client computer receives a connectivity address from the first remote computer via the first connection, and the connectivity address provides information to establish a second communication link with a second host computer.
- the method uses the connectivity address to establish a second connection wifh a second remote computer automatically and without prompting a user for address information.
- the second connection employs a second communication protocol which is different than the first communication protocol.
- the method automatically restores the state of the first connection.
- the method stores the connectivity state of the first connection.
- the method automatically restores the first connection using the stored connectivity state of the first connection without prompting the user for address information.
- the first connection is made using a first service provider program that implements the first protocol.
- the connectivity address includes a first service provider identifier identifying a second service provider program that implements the second protocol.
- the method loads the second service provider program. It uses the second service provider program to communicate data over the second connection according to the second protocol.
- the method switches to a protocol capable of sending data at a higher rate.
- the first connection is made using a modem connected to the client computer and the first communication protocol is TCP/IP
- the second connection is made using the modem connected to the client computer.
- the second communication protocol communicates by passing messages without adding a message header or other routing information to route the messages to the second remote computer. As such, it achieves a higher data transfer rate than TCP/IP protocol.
- the first and second communication protocol send data in packets and the second communication protocol uses fewer bits per packet to represent address information than the first communication protocol.
- the method further enables a remote computer to switch application programs on the local computer.
- the client computer executes a first application, which uses the first connection to communicate with the first remote computer.
- the method receives an identifier of a second application from the first remote computer. In response to receiving the identifier of the second application, it launches the second application.
- the client computer then executes the second application, which uses the second connection to communicate with the second remote computer.
- the method may be implemented in an API.
- the first process comprises an API program executing on the client computer.
- the API program establishes the second connection by terminating a first service provider program that implements the first protocol and launching a second service provider program that implements the second protocol.
- the API program is responsive to application programs executing on the client computer to receive device independent function calls to send and receive messages to the remote computers, where the device independent calls are independent of the device and communication protocols used to send the messages.
- the programming interface has a variety of features. For example in one implementation, the API program establishes the second connection in response to a message sent by an API executing on the first remote computer. This message comprises the connectivity address including an identifier of the second service provider program and a telephone number or network address.
- the API executing on the first remote computer is operable to send the message in response to a remote connection function call from an application program executing on the first remote computer.
- the API executing on the client computer is also operable to save state information of the first connection, and is responsive to a system message from an API executing on a remote computer to restore the state of the first connection.
- the method may be adapted to switch communication protocols in response to changes in input focus.
- the client computer executes a multi-tasking operating system that allows changes in focus among multi-tasking application programs.
- the API executing on the client computer maintains state information about current and previous connections with remote computers. This state information includes an identifier of an application program that is using the connection to communicate with a remote computer.
- the API is operable to monitor the focus of the operating system, and is operable to restore a previous connection automatically in response to detecting that the application program whose identifier is associated with the current connection no longer has the focus.
- the method may be used to restore the state of a previous connection in response to detecting that an application program has terminated.
- the API executing on the client computer maintains state information about current and previous connections with remote computers, including an identifier of an application program that is using the connection to communicate with a remote computer.
- the API is operable to restore a previous connection automatically in response to detecting that the application program whose identifier is associated with the current connection has terminated.
- the method is preferably implemented in software, namely, instructions stored on a computer readable medium.
- the invention also provides an API on a computer readable medium.
- the API comprises a remote connection function operable to receive a function call from an application program specifying a connectivity address.
- the API sends a system message with the connectivity address to a compatible version of the device-independent API executing on a remote computer.
- the API uses a first service provider program that implements a first communication protocol to send the system message.
- the system message with the connectivity address causes the compatible API to switch from the first communication protocol to a second protocol identified in the connectivity address.
- the API furfher includes programming code for retrieving and queuing messages from the compatible version of the API on a remote computer, and programming code operable to retrieve queued messages.
- the API includes programming code operable to switch from the first communication protocol to another communication protocol in response to retrieving a queued system message with a connectivity address by launching a second service provider program identified in the connectivity address.
- the API may include a variety of enhancements.
- it comprises programming code for storing state information about previous connections with remote computers. It also includes a restore connection function operable to receive a restore connection function call from an application program to restore a connection of a remote computer with another computer.
- the restore connection function is operable to send a system message to a compatible version of the device-independent API executing on a remote computer. To accomplish this message transfer, it uses a selected service provider program that implements a selected communication protocol to send the system message.
- the system message is operable to cause the compatible API to restore state of a previous connection on the remote computer.
- the API further includes programming code operable to restore state of a previous connection in response to retrieving a queued system message by launching a service provider program identified in the stored state information.
- the API further comprises:
- programming code for storing state information about a current connection with a remote computer, including an application program identifier identifying an application program that is currently using the API to communicate with a remote computer;
- the programming for restoring the state of the previous connection includes programming for determining a service provider identifier for the previous connection from the state information for the previous connection and automatically loading the service provider for the previous connection without prompting a user for input.
- the API further includes:
- programming code for storing state information about a current connection with a remote computer, including an application program identifier identifying an application program that is currently using the API to communicate with a remote computer;
- the programming for monitoring whether the identified application program has the focus may also include programming for determining whether a pre-specified period of time has elapsed after the identified application program loses focus and for restoring the state of the previous connection only when the pre-specified period of time has elapsed without the identified application program re-gaining the focus.
- the invention also provides an API on a computer readable medium comprising a remote connection function operable to receive a function call from an application program specifying a connectivity address, and in response, operable to send a system message with the connectivity address to a compatible version of the device-independent API executing on a remote computer by using a first service provider program that implements a first communication protocol to send the system message.
- the system message with the connectivity address is operable to cause the compatible API to switch from the first communication protocol to a second protocol identified in the connectivity address.
- the API also includes programming code for queuing messages from the compatible version of the API on a remote computer, and programming code operable to retrieve queued messages.
- It further includes programming code operable to switch from the first communication protocol to another communication protocol in response to retrieving a queued system message with a connectivity address by launching a second service provider program identified in the connectivity address.
- it includes programming code for storing state information about previous connections with remote computers.
- It also includes a restore connection function operable to receive a restore connection function call from an application program to restore a connection of a remote computer with another computer.
- the restore connection function is operable to send a system message to a compatible version of the device- independent API executing on a remote computer by using a selected service provider program that implements a selected communication protocol to send the system message.
- the system message is operable to cause the compatible API to restore state of a previous connection on the remote computer.
- the API includes programming code operable to restore state of a previous connection in response to retrieving a queued system message by launching a service provider program identified in the stored state information.
Abstract
An application programming interface implements a method for transparently switching from one communication protocol to another and for restoring the state of a previous connection. The application programming interface executes on a local, client computer, as well as remote computers. It includes functions that multi-user application programs can call to communicate in a device independent manner with other applications executing on remote computers. To support communication on a variety of different computer communication protocols, the application programming interface accesses programs called service providers that implement the communication protocols and support the message passing model of the interface. The application programming interface can transparently switch the protocol on a remote computer by sending a system message to a compatible version of the interface on the remote computer that includes an identifier of the service provider for the new protocol. In response to the message, the application programming interface loads the new service provider and takes steps to set-up a new connection. The application programming interface can also restore the state of previous connection on a remote computer by sending a system message. In response to this message, the application programming interface on the remote computer retrieves the previous connection state from an MRU stack and loads the service provider for the previous connection.
Description
METHOD FOR SWITCHING PROTOCOLS TRANSPARENTLY IN MULTI-USER
APPLICATIONS
FIELD OF THE INVENTION The invention relates to network computing and computer connectivity and more specifically to improving performance of multi-user applications for networks.
BACKGROUND OF THE INVENTION
With the advances in network computing technologies, there is an increasing emphasis in the software industry on software applications that take advantage of the power of network computing to enable users to interact and share information over computer networks. In particular, the prominence of the Internet and applications that take advantage of the Internet have grown dramatically. With this increased emphasis on network computing and the Internet, multi-user applications have become more popular. A multi-user application refers to an application in which two or more users interact over a network. Some examples of multi-user applications include multi-player games, video conferencing and groupware.
While the improvements in network computing have increased the performance of multiuser applications, today's networking technology, especially in the context of the Internet, still has performance limitations. One well-documented limitation of networks, and especially massive wide-area networks like the Internet, is the latency incurred in passing messages among participants of a multi-user application. In interactive applications, such as multi-player games, it is particularly important to minimize the delay in passing messages back and forth between the users' computers.
Another limitation of network computing, especially in the context of highly interactive applications, is the inefficient use of transmission bandwidth of popular network communication protocols. Standard network communication protocols like TCP/IP send data over a network by forming packets to carry portions of the data. Each packet includes layers of address information. In networking applications where transmission bandwidth is limited, the address information further limits the bandwidth available for transferring data between computers. To illustrate these issues, it his helpful to consider an example of a multi-user application on large, wide area network, such as the Internet. To join into a multi-user application, each participating user establishes a connection between the user's computer and a network interconnecting the users' computers. Each computer can connect to the network through a modem via a telephone line or a network adapter via a local area network (LAN). Figure 1 illustrates an example of a network connection formed via the Internet where the user typically establishes a dialup modem connection with an Internet Service Provider.
In a multi-user application session, each user may be required to launch a copy of the application on the user's computer. Alternatively, the multi-user application may run on a central computer on the network with which each user of the multi-user application is in communication. The computers participating in the multi-user application communicate according to a network communication protocol. Standard communication protocols, such as TCP/IP, transfer data in packets. In TCP/IP, the packet is marked with a sequence number, the address of the recipient, and the address of the sender. This addressing information is common in standard protocols so that the protocol can be used for a variety of applications and can be used to address a large number of users. The transmission delays and inefficiencies of the transmission protocols used on the
Internet degrade performance of multi-user applications, and in particular, multi-player games. To address this problem, multi-player games are implemented on dedicated game servers that remote users can connect to via a direct modem-to-modem connection rather than via the Internet. While these game servers provide enhanced performance, they make it more difficult to coordinate multi- player game sessions because each player must know when to connect to the server and what protocol to use.
The Internet can serve as an excellent forum to bring users together. To coordinate a multi-user application session, participants in the session can meet in a virtual lobby hosted on the Internet (or some other wide area network) to establish the time and place for the session. A virtual lobby, typically hosted on a server called a lobby server on the Internet, is a form of a chat room. Users typically navigate to the virtual lobby with a network browser. Once at the virtual lobby, a user interacts with other users by entering text or cursor device input via the graphical user interface (GUI) of the browser. For example, players of a multi-player game might "meet" in an Internet game lobby to plan an immediate multi-player game session on a local server outside of the Internet. Lobbies, with the accessibility advantages of wide area networks like the Internet, can bring thousands of users together to plan multi-user application sessions on smaller networks. Switching to these smaller networks, users of multi-user applications enjoy more efficient communication.
Figure 1 shows a diagram of the Internet to illustrate the difference between game servers on the Internet and dedicated game servers independent from the Internet. Users 20, 22, 24 of multi-user applications can connect to the Internet through Internet service providers 30, 32, 34, meet in an Internet lobby 36, plan a multi-user application session, and then transfer to the application server 38 hosting the application session without disconnecting from the Internet. However, the performance of this type of multi-user application session is not optimal because a large portion of a packet for a wide area network protocol is devoted to addressing. Further, message packets are routed through multiple Internet routers 40, 41, 42, 43, 44, 45 as well as an Internet Service Provider before being reassembled for each user. The resulting communication is
slow and unpredictable, especially for real-time multi-user applications requiring quick responses, such as multi-player games. Such multi-user application sessions may be required to slow down to accommodate the inefficient communication.
A smoother, faster multi-user application session can be achieved by conducting the session on a dedicated multi-user application hub server 50. Note that the direct connection to the server 50 bypasses the Internet. In a game session on the server, messages are routed to the hub, and then to another user 20, 22, 24. Message packets used to communicate through the smaller network need less space per packet for addressing. The resulting communication is more efficient than Internet communication. The efficiency advantages of current systems using both lobbies and dedicated application servers are balanced by the disadvantages of having to switch manually between multiple communication protocols and links.
Figure 2 shows the steps taken by a user following current methods of switching between a lobby and a multi-user application session. Under existing systems using both a lobby and a dedicated application server, a user must first choose a protocol (60) and establish a connection (61) to a wide area network hosting a lobby, or directly dial a computer hosting a lobby. The user must then find the lobby on the lobby server or network (62).
After planning a multi-user application session with other users in the lobby (64), each user must then disconnect the communication link with the lobby (66), noting the information required to connect to the dedicated application server. This information may include protocol information, a network address, and/or a telephone number.
Next, each user must connect to the dedicated application server using the information from the lobby. The protocol followed when establishing this new connection may differ from the protocol used to connect to the lobby. If so, the user must select the proper protocol to use (68) and then make the connection (70). Each user must also manually launch a copy of the multi-user application that runs on the user's personal computer (72). The step of manually launching the copy of the application is avoided in a currently available game programming interface called
DirectPlay® from Microsoft. However, this is limited to cases where the multi-user application is executed on the existing communication protocol. Once the users of the multi-user application are connected to the network of the dedicated application server, the session commences (74). Information is routed from one user or application to the other users or applications through the dedicated application server.
When the session is finished, each user terminates the application (76) and disconnects from the dedicated application server (78). To reconnect to the original lobby server, each user must reconnect (61) to the wide area network and visit the lobby, or recall the protocol and phone number for a dial-up lobby.
Current systems using both a lobby and a dedicated application server require the user to manually connect and disconnect numerous times. Users frequently must remember protocol and address information for the various connections.
Some application servers provide dedicated lobby servers that do not require a protocol switch from the lobby to the game application. While such dedicated lobby servers do not require the user to keep track of information needed to switch protocols from the lobby to the game application, they are typically specific to one game application. In addition, they are not flexible enough to deal with cases where a protocol change might be necessary to access a computer on another network or to improve performance.
SUMMARY OF THE INVENTION The invention provides a method for changing communication protocols on a user's local computer from a remote computer. This method is "transparent" to the user of the local computer because the remote computer sends connectivity information that enables a software module on the local computer to switch communication protocols without prompting the user for connectivity information. In fact, the user does not have to enter any input to change the protocol. An additional advantage of the invention is that it can be implemented so that the application program or programs running on the local computer also do not need to control changes in the communication protocols that they use to communicate with remote computers. For example, in the context of a multi-user application, the version of the multi-user application running on the user's computer does not have to handle the details of switching protocols or restoring the state of a prior connection when the multi-user application session is over.
In one implementation, the method for changing protocols is executed in a software module called a connectivity application programming interface (API). The connectivity API runs on the local computer as well as the remote computers. This module acts as an interface between application programs, on one side, and programs that implement communication protocols called "service providers," on the other side. Applications and other programs can establish a connection with a remote computer by invoking the services of the connectivity API and passing it a connectivity address. The connectivity address is a data structure with encapsulated address information, including an identifier of a service provider and other connectivity information such as a phone number, IP address, COM port and modem settings, etc. In response to receiving the connectivity address, the connectivity API sets up a new connection via a service provider, while saving the connection state of an existing connection. At the completion of a session, the connectivity API can be invoked to restore the state of the previous connection. These features of the connectivity API enable it to switch and restore the state of a remote connection transparently to the end-user and local applications.
In one particular implementation, a remote computer changes the protocol on a user's local computer by invoking the connectivity API on the remote computer to send a connectivity address to the connectivity API on the local computer. In response to receiving the connectivity address, the local connectivity API stores the state of the existing connection and loads a service provider to set-up a new connection. The local connectivity API provides the service provider with the connectivity information necessary to establish a new connection. The remote computer can also restore the state of a previous connection by instructing the local connectivity API to recall the stored connectivity state of a previous connection and use this information to restore a connection using a different service provider. Additional features and advantages of the invention will become more apparent from the following detailed description and the accompanying drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
Fig. 1 is a network diagram of a wide area network such as the Internet with a lobby server and an application server.
Fig. 2 is a flowchart showing the steps taken by the user following prior art methods of switching communication protocols and links.
Fig. 3 is a diagram illustrating a computer system that serves as an operating environment for an implementation of the invention. Fig. 4 is a diagram showing the components of a client computer capable of connecting with a lobby and a dedicated application server using the present invention.
Fig. 5 is a flowchart showing the steps taken by the user of the present invention. Figs. 6A and 6B are diagrams illustrating the operations of a lobby client, lobby server and corresponding connectivity API modules for an initial phase of the game session shown in Fig. 5. Fig. 6 A shows the navigation of the lobby client to the lobby server using a service provider for a TCP/IP connection (service provider 1). Figure 6B shows the selection of a game application, the launching of the game on the client and the transparent switch to the game protocol (service provider 2) in response to a message from the remote connectivity API.
Fig. 7 is a diagram illustrating the operation of the client and server game applications and their respective connectivity APIs at the end of a game session when the remote connectivity API restores the state of previous connection on the client.
DETAILED DESCRIPTION
The invention is directed to a method for switching communication protocols and links transparently to participants in a multi-player application. This method can improve the performance of multi-user applications by reducing latency and improving transmission bandwidth. In addition, it simplifies the use of multi-player applications because the user does not have to
manually switch protocols or remember address information. Finally, it simplifies application development because the game applications do not have to include code to control protocol switching.
One implementation of the invention is an enhancement to the DirectPlay® application programming interfaces (APIs) marketed by Microsoft Corporation of Redmond, Washington. The DirectPlay® API is a network connectivity API that enables applications to communicate with each other independent of the underlying transport, protocol or on-line service. An implementation of the invention can use the DirectPlay® interfaces to establish connections according to a variety of different protocols without requiring the user or the application programs to handle the details of the connections. Specifically, the implementation can switch to a higher speed connection on another network and then restore an original connection automatically. First, we describe an implementation of the invention with reference to specific software functions and data structures, and then we provide a listing of specifications for the functions and structures from the DirectPlay® API.
Operating Environment of the Invention
Figure 1 and the following discussion are intended to provide a brief, general description of a suitable computing environment in which the invention may be implemented. The invention is implemented in program modules comprising executable instructions that run on a computer. Generally, program modules include routines, programs, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The invention may ported to other computer system configurations, including hand-held devices, multiprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, and the like. The invention may also be implemented in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.
Figure 1 illustrates an example of a computer system that serves as an operating environment for the invention. The computer system includes a personal computer 120, including a processing unit 121, a system memory 122, and a system bus 123 that interconnects various system components including the system memory to the processing unit 121.
The system bus may comprise any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using a bus architecture such as PCI, VESA, MicroChannel (MCA), ISA and EISA, to name a few. The system memory includes read only memory (ROM) 124 and random access memory
(RAM) 125. A basic input/output system 126 (BIOS), containing the basic routines that help to
transfer information between elements within the personal computer 120, such as during start-up, is stored in ROM 124.
The personal computer 120 further includes a hard disk drive 127, a magnetic disk drive 128, e.g. , to read from or write to a removable disk 129, and an optical disk drive 130, e.g. , for reading a CD-ROM disk 131 or to read from or write to other optical media. The hard disk drive 127, magnetic disk drive 128, and optical disk drive 130 are connected to the system bus 123 by a hard disk drive interface 132, a magnetic disk drive interface 133, and an optical drive interface 134, respectively. The drives and their associated computer-readable media provide nonvolatile storage of data, data structures, computer-executable instructions (program code such as dynamic link libraries, and executable files), etc. for the personal computer 120.
Although the description of computer-readable media above refers to a hard disk, a removable magnetic disk and a CD, it can also include other types of media that are readable by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, and the like. A number of program modules may be stored in the drives and RAM 125, including an operating system 135, one or more application programs 136, other program modules 137, and program data 138.
A user may enter commands and information into the personal computer 120 through a keyboard 140 and pointing device, such as a mouse 142. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 121 through a serial port interface 146 that is coupled to the system bus, but may be connected by other interfaces, such as a parallel port, game port or a universal serial bus (USB).
A monitor 147 or other type of display device is also connected to the system bus 123 via an interface, such as a video adapter 148. In addition to the monitor, personal computers typically include other peripheral output devices (not shown), such as speakers and printers.
The personal computer 120 operates in a networked environment using logical connections to one or more remote computers, such as a remote computer 149. The remote computer 149 may be a server, a router, a peer device or other common network node, and typically includes many or all of the elements described relative to the personal computer 120, although only a memory storage device 150 has been illustrated in Figure 1. The logical connections depicted in Figure 1 include a local area network (LAN) 151 and a wide area network (WAN) 152. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet. When used in a LAN networking environment, the personal computer 120 is connected to the local network 151 through a network interface or adapter 153. When used in a WAN networking environment, the personal computer 120 typically includes a modem 54 or other means
for establishing communications over the wide area network 152, such as the Internet. The modem 154, which may be internal or external, is connected to the system bus 123 via the serial port interface 146.
In a networked environment, program modules depicted relative to the personal computer 120, or portions of them, may be stored in the remote memory storage device. It will be appreciated that the network connections shown are exemplary and that other means of establishing a communications link between the computers may be used.
Implementation Overview As summarized above, the invention provides a method for transparently switching protocols to improve performance and simplify the user operation and application development of multi-user applications. The invention is implemented in a connectivity API that manages connections through a variety of program modules called service providers. The service providers contain network specific code necessary to establish a specific type of connection between computers, such as a direct modem-to-modem connection, a serial connection, an Internet TCP/IP connection, and an IPX connection. The connectivity API includes an API function for changing protocols on a remote computer. This function causes a copy of the connectivity API on the remote computer to manage the process of setting up a new connection, including changing protocols (if necessary) and also saving the state of an existing connection. The connectivity API includes another function for restoring the state of the connection. These functions enable the connectivity API to switch protocols transparently to the user. In addition, they allow an application to change and restore a connection of a remote computer without requiring control from application programs executing on the remote computer.
Below, we describe an implementation of the invention using the example of a "virtual lobby" on the Internet. Like the virtual lobbies described in the background section, the virtual lobby in this example is a program running on a server that acts as a meeting place for participants in a multi-player application, and in particular, a multi-player game. The virtual lobby provides a central location on the Internet (or possibly some other network) that users can access to meet other players and initiate a multi-player game session. To access the lobby server, users invoke a program called a lobby client, executing on their computers to make a connection with the lobby server. When users choose to begin a game, they select the game via the user interface of the lobby client. The lobby server application then invokes a copy of the connectivity API running on the server to send the users' computers the information needed to establish a multi-player game session. The connectivity API running in each of the users' computers uses this address information to establish a connection with a game server and set-up a multi-player game session. The connectivity API will switch protocols for the multi-
player application session and then restore the state of the original connection automatically when the session is terminated.
Software Architecture Overview Figures 4A through 4C are diagrams illustrating the software architecture on a client computer 200, a computer 202 hosting the lobby server, and a computer 204 hosting a multi-player game application, respectively. More specifically, fig. 4A illustrates the program modules in a typical configuration of a client computer 200, the computer of a participant in the multi-player application. Fig. 4B illustrates the program modules in the lobby server 202, a remote computer that each player accesses to coordinate a multi-player game. Finally, Fig. 4C illustrates the program modules in a computer 204 that hosts the multi-player game session.
In the example of Fig. 4 A, the client computer is executing several application programs 210-216, including an application called a "lobby client" 216. The client computer 200 has a multi-tasking operating system, namely the Windows® 95 operating system, which enables the applications 210-216 to execute concurrently. The applications 210-214 and the lobby client 216 invoke the services of the connectivity API 218. The connectivity API 218 provides a device- independent, and transport independent interface to connectivity services. For example, if an application 210 running on the client computer wishes to send a message to another application running on a remote computer, the application 210 invokes device independent functions of the connectivity API 218 to send the message. The connectivity API 218, in turn, invokes the services of a connection-dependent service provider (e.g., 220-226) to send the message over a connection medium associated with the service provider.
The service providers 220-226 use device-dependent drivers 230-236 to send data to a remote computer via a hardware device 240 such as a modem or network adapter, or port of the computer such as a serial or parallel port. The software drivers for devices, such as modems or network adapter cards, are typically available from the device manufacturer. The software drivers for serial and parallel ports are usually bundled with the operating system, as in the case of the Windows® 95 operating system.
There is no explicit connection between the client computer 200 and the lobby or game servers because the architecture supports a variety of types of connections. For example, the client computer can establish a connection with the lobby and the game server via a local area network, a direct modem-to-modem connection, or via a wide area network (e.g., through a dial-up connection to the Internet).
Fig. 4B shows the program modules on the computer 202 that acts as the lobby server. The lobby server executes a lobby server application 250, the connectivity API 252, one or more service providers (e.g. , 254), and one or more device drivers (e.g., 256). The lobby server application 250 implements the virtual lobby, which users access to coordinate a multi-player game
session. In this implementation, the structure and function of the connectivity API 252, service provider 254, and device driver 256 are the same as their counterparts on the client computer. Lobby servers are typically located on the Internet. In this case, the client computer would likely access the lobby server by establishing a dial-up connection. The connectivity APIs 218 and 252 on the respective machines communicate with each other via the same type of service provider (e.g., 220 and 254), which in this case, would be a service provider for a TCP/IP connection. The device drivers are specific to the type of hardware used in each machine to connect to the Internet. For example, if the client computer were connected to the Internet via a dial-up connection, the device driver would be a modem driver. Fig. 4C shows the program modules executing on the computer hosting the multi-player game application. The multi-player game application 260 invokes the connectivity API 262 to send messages to and receive messages from the client versions of the game application (e.g., app. 210 in Fig. 4 A) on the client computers. In the example shown here, we assume that the game application is executing on a dedicated game server that is accessed via a direct modem-to-modem connection. As such, the connectivity API 262 uses a service provider 264 that is specific to a modem-to-modem connection. In an implementation for the Windows® 95 operating system, the service provider 264 uses the telephony Application Programming Interface (TAPI) provided with the operating system to perform call control functions and uses the communication APIs provided with the operating system to send and receive messages in serial data stream. The service provider 264 uses a device dependent modem driver 266 to communicate with a modem 268.
Having provided an overview of the software architecture, we now describe the program modules of an implementation in more detail.
The Connectivity API-Service Provider Architecture The connectivity API uses a send/receive communication model to implement an API that enables applications in a multi-player game session to communicate with each other. Each computer participating in a multi-player game session has the following components: 1) a connectivity API, and 2) one or more service providers. The connectivity API provides a common interface to the applications (e.g. , applications - in Fig. 4 A) and hides the details of making connections and sending data over a specific communication medium from the applications. When sending or receiving data, the application need only concern itself with the performance of the communication medium. The application does not need to know whether the medium is provided by a modem, network, or on-line service.
At run-time, the connectivity API binds with a service provider installed on the user's computer. Specifically, to access the services of the connectivity API, an application invokes a function call in the API to create an instance of a connectivity object and specifies the communication medium. In response, the connectivity API creates an instance of the connectivity
object, loads the service provider (if not already loaded) associated with the communication medium and binds the object to that service provider. The connectivity object adheres to the COM specification and exposes its functionality via a COM interface. Implemented as Windows® dynamic link libraries, the service providers bind to the COM object. The connectivity API includes an Enumerate function that an application can use to list of all of the service providers installed on the system. This is one of the functions that the connectivity API uses to support several communication transports and protocols. To utilize transport and protocol independent communication services, the application selects a service provider and instructs the connectivity API to create a connectivity object that uses the service provider.
The connectivity API uses a send/receive communication model to send messages between players. To implement this communication model, the connectivity object maintains a message queue for each player managed by the application. An application can manage more than one player. The connectivity objects communicate messages to each other. When a connectivity object receives a message, it makes a copy of the message for the message queue of each player for which the message is destined.
Messages can be sent according to a peer-to-peer or client-server paradigm. In an implementation of the peer-to-peer paradigm, for example, an application can send a message on behalf of a player to any other player in a multi-player game session. One of the client computers is designated as a session host whose purpose is to arbitrate new computers joining a session and to assign ID numbers when new players and groups are created. In an implementation of the client- server paradigm, all messages can be sent to a "server" player on a host computer (e.g. , the game server), which forwards the messages to the appropriate "client" players.
An application can use the connectivity API to send messages among players. To send a message, the application invokes a send message function, implemented as a member function of the connectivity object. The application specifies the destination of the message by providing a player ID.
While most messages are defined by the application, some messages are defined by the connectivity API. These messages are referred to as system messages, since they do not originate from an application. For example, when a player quits or a new player joins a session, the application receives a message from the connectivity API that provides the name of the player and the status change that has occurred. The system messages are sent by a "virtual player" that has a player ID defined in terms of a constant DPID SYSMSG.
Another form of message is a broadcast message. A message is broadcast to all players of a session by sending the message to a player ID defined by a constant DPID ALLPLAYERS.
Similarly, a message is broadcast to all players of a group by sending the unique group ID created for a group.
The coimectivity API also uses messages to set-up and to restore remote connections. The connectivity API includes functions to instruct a remote copy of the connectivity API to create a new connection and to restore the state of a former connection. In both cases, the connectivity API on one computer sends a message to the connectivity API on another computer, instructing the second connectivity API to change a connection. To set-up a new connection, the connectivity API provides an address with the message that includes the information necessary to establish the new connection. To restore a previous connection, the connectivity API that originates the message can provide an ID of the previous connection that it wishes to restore. However, as a default, the connectivity API that receives this message will restore the immediate, prior connection. In the case where the connectivity API cannot establish a new connection according to a message from a remote connectivity API, the local connectivity API reverts to the original connection it had with the remote connectivity API. If the local connectivity API is successful in resuming the original connection, it reports the failure to establish the new connection to the remote connectivity API in another message. It is significant to note that the application programs do not get involved in the process of changing protocols. Instead, this process is transparent to the applications and is handled entirely within the connectivity API. The messages sent between the connectivity API running on the respective computers are not sent to or processed by the application programs that use the connectivity API's services. The connectivity API manages multi-player applications in terms of sessions, players, and groups. Each of these terms is described further below.
Session Management
A "session" is an instance of several applications on remote machines communicating which each other. An application uses session-management functions of the connectivity API to open or close a communications channel. An application either creates a new session or enumerates existing sessions and finds one to connect to. The application that creates the session is referred to as the "host" . The host assigns player and group ID numbers and regulates new applications joining the session. The connectivity API includes a member function called EnumSessions that enables an application to locate all the existing sessions in progress on the network. The Open member function is used to create a new session or connect to an existing one. A session is described by its corresponding data structure called DPSESSIONDESC2. This structure contains application- specific values and session particulars such as the name of the session, an optional password for the session, and the number of players to be allowed in the session. After opening a session, an application can call the GetCaps member function to retrieve the speed of the communications link and other properties of the network and service provider.
When an application wishes to leave a session it can use the Close member function. If the session host leaves the session, the host will migrate to one of the other players in the sessions and generate a DPSYS_HOST system message.
Player Management
An application uses player-management functions in the connectivity API to manage the players in a session. In addition to creating and destroying players, the application can enumerate the players or retrieve a player's communication capabilities. Functions called CreatePlayer and DestroyPlayer create and delete players in a session. The connectivity API assigns the player a Player ID. Applications and the connectivity
API use the Player ID to route message traffic.
An application uses the EnumPlayers member function of the connectivity API to discover what players are in a current session and their friendly and formal names. This function is typically called immediately after a call to the Open member function that joins an existing session. It can also be used when the application needs to iterate through all the players in a session. A function called GetPlayerCaps retrieves information about the speed of a player's connection to the session.
Group Management The group-management functions of the connectivity API allow applications to create groups of players in a session. An application can then use a single call to the Send member function to send messages to an entire group, rather than to one player at a time. Some service providers can send messages to groups more efficiently than sending them to the individual players in the group (multicasting), so in addition to simplifying player management, groups can be used to conserve communication channel bandwidth.
The CreateGroup and DestroyGroup member functions of the connectivity API create and delete a group of players. The connectivity API assigns a Group ID to the group. The group is initially empty; the application uses the AddPIayerToGroup and DeletePlayerFromGroup member functions to control the membership of the group. To discover what groups exist, the application can call the EnumGroups member function. To enumerate the players in a specific group, the application can call the EnumGroupPlayers member function.
Message Management As introduced above, the connectivity API provides message-management functions that allow an application to route messages between players. The application can use a Send member function to send a message to an individual player, to a group, or to all the players in the session,
by specifying a player ID, a group ID, or DPID ALLPLAYERS for the destination. There is no limit to size of the message that DirectPlay® can send. An application can call GetCaps to find out the maximum number of bytes that can be sent in a single packet. Larger messages are sent using several packets. To receive a message from the message queue, an application uses a Receive member function. This function allows the application to specify whether to retrieve the first message in the queue, only the messages TO a particular player ID, or only those FROM a particular player ID. The application can use the GetMessageCount member function to retrieve the number of messages waiting for a given player. The connectivity API generates system messages that are used to notify players of changes in the session. System messages are FROM a virtual player defined by the following ID: DPID_SYSMSG. The application can control what system messages are generated through the use of flags in a data structure called SESSIONDESC2 structure.
Service Providers and the Service Provider Interface
Service providers are program modules that include network specific code used by the connectivity API to communicate over a network. The service providers include code needed to send and receive messages over a specific connection medium. The connectivity API is responsible for managing the session and the players and groups in that session. It is also responsible for generating or directing messages, and responding to messages. The service provider acts as a transport to send a message from one computer to another at the request of the connectivity API.
In an implementation for the Windows® 95 operating system, service providers are implemented as Windows dynamic link libraries (DLLs). Examples of service providers include a service provider for direct modem-to-modem connections, a service provider for a serial connection, a service provider for an Internet TCP/IP connection, and a service provider for an IPX connection. The service providers in the current implementation are implemented using components of the Windows® 95 operating system. For example, the direct modem-to-modem connection is implemented using TAPI for call control functions and using the communication APIs in Win32® API. As another example, the service provider for the TCP/IP connection includes the implementation of the service provider interface functions (as described in this specification), which communicate with Winsock, the sockets application programming interface in the Windows® Operating System. Winsock communicates with a TCP/IP stack, which in turn communicates with either a modem or network device driver. Winsock and the TCP/IP stack are provided with the Windows® Operating System. The device drivers are typically provided by the device manufacturer.
To install a service provider on a computer with the Windows® 95 operating system, the compiled DLL representing the service provider is copied to the Windows SYSTEM directory
(SYSTEM32 on the Windows NT® Operating System) and registry entries are created identifying the service provider. The following example is a registry (REG) file that will add the appropriate registry entries to the registry of the operating system. Note that a single DLL may implement several service providers. In this case, each service provider has its own registry entry, but all have the same DLL listed as the Path.
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay] [HKEY LOC AL M ACHINE\Software\Microsoft\DirectPlay\
Service Providers] [HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\
Service Providers\ name of service _provider] " Guid" = " {OF 1 D4860-8 AD9- 11 cf-9 A4E-00 A0C805435E} "
"Path" = "dpmysp.dll" "dwReservedl" =dword:0 "dwReserved2" =dword:0
[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\ Service Providers\ name of service _provider\
Address Types\ address type guid] The parameter name_of_service_provider is the name of the service provider as it appears in the list that the user can select from when choosing a service provider. The name will be passed to SPInit in the IpszName parameter.
The parameter Guid is a unique number of the service provider. This will be passed to SPInit in the IpGuid parameter. The Path parameter is the name of the DLL which implements this service provider.
The parameter address_type_guid represents one or more GUIDs indicating what address type(s) this service provider uses to locate a session on the network. If no network address is needed, then this key is not required, (e.g. Internet TCP/IP needs an IP address so the GUID DPAID INet is created as a key. The format of these addresses is described in more detail below.) The connectivity API interacts with the service provider through the service providers programming interface. An implementation of this interface includes the functions summarized below.
In addition to the interface and member functions described above, the connectivity API has a COM interface called IdirectPlaySP that service providers can access to invoke services of the connectivity API. The following table lists these functions.
A more detailed specification of the functions listed above is provided later in this description.
Message Structure
The structure of a message from the connectivity API includes a message body supplied by the connectivity API and a message header. The message header is a portion of the message that the service provider can reserve to fill in additional information, such as an address. When the connectivity initializes a service provider, the service provider can return a parameter to indicate the size of the message header. This parameter specifies the size of the message header in bytes. When the connectivity API requests the service provider to send a message, it will leave the specified number of bytes open at the beginning of a message buffer so that the service provider can use this portion of the message structure as a header. Note that the service provider does not have to add any header to the message if no header is necessary to route the message to the intended recipient. This allows the service provider to maximize the use of the transmission bandwidth for sending data from the application, as opposed to sending address information.
Encapsulation of Network Address Data
The connectivity API uses an encapsulated address format to represent network address information. When the connectivity API wishes to create a session, it provides the encapsulated address information to a specified service provider. The encapsulated address provides all of the information that the service provider needs to establish a connection. Throughout this specification, we use the general term "connectivity address" to refer to a network address.
The connectivity address is made up of a series of chunks. Each chunk consists of the following:
1) A GUID indicating what type of data is contained in the chunk;
2) The size of the data; and
3) The data field.
When a service provider receives a connectivity address, it parses it for useful information and saves it in a data structure such as a subkey in the registry of the Windows® operating system. Though not required, the connectivity address is preferably stored as a subkey to the key used to register the service provider in the registry. This method of storing the connectivity address is advantageous because it provides an effective way to ensure that the address is removed when the service provider is de-installed. Specifically, when the service provider is de-installed, the operating system removes its key in the registry, and all of the subkey s associated with its key.
The service provider can then use the EnumAddress function of the connectivity API to parse individual chunks. The service provider presents a dialog box asking the user for more information only if the information in the connectivity address is incomplete.
One implementation of the connectivity address has predefined the following chunk identifiers:
The connectivity API uses this address to control transparent protocol switching on a remote computer. When an application invokes a RemoteConnect function and passes a connectivity address and the destination address of the connectivity API, the connectivity API sends a message to the connectivity API specified in the destination address along with the connectivity address. The connectivity API at the destination then uses the connectivity address to establish a
new connection with the newly specified service provider. The details of an implementation of RemoteConnect are provided below.
Lobby Related Program Modules The connectivity API includes a programming interface that enables lobby-related programs to interact with multi-user applications that use the connectivity API. By bringing users on remote computers together, lobby software provides a matchmaking function to coordinate multi-player application sessions. The lobby-related functions in the connectivity API enable lobby software to initiate a multi-player session automatically. In particular, the lobby software can use the functions in the connectivity API to switch protocols, launch an application, and add the application to a multi-player session.
The lobby software includes the lobby client and the lobby server application. The lobby client runs on the user's computer and provides a user interface through which the user can access a "virtual lobby" and locate other user's to engage in a multi-player application session. The virtual lobby is most commonly used to plan multi-player game sessions.
The lobby server application is a program that hosts the lobby, nrnning on a lobby server. The lobby server may be a permanent server that the client computer communicates with via a direct modem-to-modem dialup connection. Alternatively, the lobby server may be located on a network, such as a site on the Internet or a peer computer acting as the lobby server on a peer-to- peer network.
The connectivity API includes functions that the lobby client can use to initiate a multi- player application session. Once a group of players have decided to start a session, the lobby client can invoke functions in the connectivity API to launch an application and provide it with information needed to select a service provider and connect to the session. In addition, the lobby server can use the Remote connection function to connect an application to a multi-player application session.
The connectivity API includes functions to allow the lobby client to interact with and determine information about applications that are written for the connectivity API ("compatible applications"). The lobby client can determine which compatible applications are installed on the client computer through a function called EnumLocal Applications. It can also determine what service providers are available through a function called DirectPlayEnumerate. Once a user has decided to join a session and the lobby client has verified that the application and service provider needed are available, it can launch the application and connect it to the session through the RunApplication method. In this call, the lobby client will specify what application to run, which service provider to use, what information the service provider will need to get connected to the session (using the Create Address and Enum Address methods), and the name the user is known by within the lobby environment. The connectivity API will locate the application executable and
launch it with the appropriate command line switches. The connectivity API will also store all the service provider and connection information.
Rather than requiring the application to establish a connection for a session, the lobby server application can use the RemoteConnect function to switch protocols transparently. The lobby server application can invoke the RemoteConnect function and pass the connectivity address needed to connect the client computer to multi-user application session.
When the session is over, the host of the multi-user application can use the RestoreConnection function to restore the state of the user's connection to the lobby server. Multi-user Applications In a multi-user application session, there is a version of a multi-user application on each of the user's computer. In a peer-to-peer paradigm, one of the applications acts as the host of the session. In a client-server paradigm, there is an application that acts as a server and all other participating applications are clients to this server.
To illustrate the operation of the invention, we describe an example where the host of the multi-user application is a multi-player game application executing on a dedicated application server. Fig. 4C above shows the program modules relevant to this example on a game server. The software executing on the server includes the multi-player game application, the connectivity API, a service provider, and a device driver.
To improve performance of the multi-player game, the game server is preferably a dedicated server that the client computer of each game participant connects to via a direct modem- to-modem connection. Because the connectivity API can use a variety of different types of service providers, it is possible that the client computers will use another communication medium to connect to the multi-player application session. In fact, it is possible that some client computers involved in a session will use a different communication medium than other client computers in the same session.
It is important to emphasize that the host of the multi-player game session does not have to be based on a client-server model where each user is a client and the host application executes on a game server. The multi-player game can be based on a peer-to-peer paradigm, and one of the player's computers can also act as the host of the game session.
Example Illustrating the Operation of the Connectivity API
The invention simplifies the operation of multi-player games from the standpoint of the user because it eliminates the requirement that the user manually change communication protocols when entering or exiting a multi-player game session. In the specific case of the lobby, the invention reduces or eliminates the need for input from the user when switching between the communication protocols for the lobby and the multi-user application session. By reducing the number of manual connections that the user has to make and eliminating the need to enter address
and protocol information, the invention allows the user to enjoy better game performance without the inconveniences of switching protocols manually.
Figure 5 is a flow diagram showing the steps that are initiated or performed by a user in a lobby application that uses the connectivity API to initiate a multi-player game session. The operation of the connectivity API and service providers are detailed in the next section.
Before entering a multi-player game session, the user begins by visiting the lobby. To visit the lobby, the user launches a lobby client on the client computer (300). For a Windows-based application, this is typically accomplished by using the mouse to click on the lobby client application. One example of a lobby client application is an Internet browser such as the Internet Explorer browser from Microsoft Corp.
Next, the user connects to a lobby by selecting the lobby through the user interface of the lobby client (302). After initially entering protocol and address information, the user can make subsequent connections to the lobby by merely choosing the lobby without entering any address information. For example, the user might click on an icon that initiates a connection process using stored protocol and address information.
Once in the lobby, the user meets with other users, selects an application, and selects a game server. If the user wishes to initiate a multi-player game session (304), she will coordinate the selection of an application and game server with other users visiting the lobby and submit her selection of the application and game server to the lobby server. The selection of an application and game server effectively begins the game application from the perspective of the user. The connectivity API manages the details of switching communication links and protocols, launching the application on the client, establishing a connection to the application server, and opening a multiuser application session.
Next, the user engages in a multi-user application session (306). When finished, the user closes the application or otherwise indicates that the session is over (308). The connectivity API manages the details of closing the session, terminating the connection to the application server, and re-establishing a connection to the lobby.
The return arrow 310 in Fig. 5 represents that the connectivity API restores the user's connection to the lobby and returns the user to the lobby. Now returned to the lobby, the user can plan another multi-user application session by finding a new group of users, a new application, and/or a new application server. If the user wishes to exit the lobby, the user can navigate to some other site on the Internet or terminate the lobby client.
Figures 6A-B and Figure 7 are block diagrams illustrating the operation of the remote connection and restore functions using the example provided in Figure 5. Specifically, Figures 6 A and 6B illustrate how a lobby server uses the remote connection function to switch the client computer's physical connection and communication protocols from the lobby server to the game server.
To distinguish among software components, Fig. 6 A shows the operations of the lobby client, the connectivity API and the service provider for the TCP/IP connection (Service provider 1) in three separate columns. Each of these components is in the client computer. Fig. 6 A begins at the point where the operating system has launched the lobby client in response to a user request. The lobby client begins by performing some preliminary steps to initialize the connectivity software in the user's computer. In one of these preliminary steps, the lobby client calls LobbyCreate (400) to create a lobby object. To accomplish this, the lobby client calls a LobbyCreate function in the connectivity API (namely, the DirectPlay Lobby Interface). In response, the connectivity API creates an instance of a lobby object (402) and returns a pointer to this lobby object (404). The lobby object provides an interface through which lobby-related APIs can be called.
In another preliminary step, the lobby client creates a connectivity object by invoking the DirectPlayCreate function (406) in the connectivity API. The lobby client passes a connectivity address (408) to the connectivity API when it invokes this function. The connectivity address includes the address information needed to establish a remote connection via the service provider. In response, the connectivity API creates an instance of a connectivity object (410) and returns a pointer to the object. In creating this object, the connectivity API invokes the SPInit function of the service provider to initialize the service provider (412). The service provider parses the connectivity address data (414) and stores it for future use (416). The service provider also makes sure that it has the resources that it needs (e.g., the hardware and software and communication protocols) and loads the communication protocol (418). In addition, the service provider fills in a data structure with the pointers to the functions that it has implemented (e.g. , a function table) 420, the version number, and the message header size (422).
In the case where the lobby server is located on the Internet, the service provider is the service provider for a TCP/IP connection. This service provider implements the TCP/IP protocol. The lobby client performs functions that enable the user to visit the lobby server. In response to a request to access the lobby server application, the lobby client acts as a network browser. It performs conventional network browsing functions to access the lobby server application (424).
To show the interaction between the client and the lobby server, Fig. 6B illustrates the operation of the lobby client and client connectivity API on the left, and the server connectivity API and lobby server application on the right. The dashed line separates the client and server software components and represents the communication medium used to communicate between the connectivity APIs of the client and server, namely, the TCP/IP connection and the TCP/IP service providers on each computer. As shown in Fig. 6B, the lobby client and lobby server establish a connection with each other via the TCP/IP protocol (426, 428). The lobby client sends data to and receives data from the lobby server application to enable the user to coordinate a game session. Specifically, in this example, the lobby client gets a list of the game identifiers (IDs) (430) by
requesting them from the lobby server application via the TCP/IP connection. In response, the lobby server sends the application identifiers (432).
When the user selects a game application and a game server (434), the lobby client sends a message to the lobby server application, specifying the application and the server that the user has selected (436).
When the user selects a game application, the lobby client invokes the RunApplication method of the lobby object on the client computer (the local user's computer)(438) and passes the lobby object the application identifier (an application GUID). The application identifier is a universally unique identifier assigned to the game application program. This causes the lobby object to launch the game application on the user's machine (440) by identifying the application
GUID to the Windows® operating system and requesting the operating system to execute the game. At this point, the modem on the user's machine is still being used for the connection to the lobby server application. To change the communication protocol as well as the connection on the user's computer, the lobby server application invokes the RemoteConnect function of the connectivity API on the computer hosting the lobby server application (442). In response, the connectivity API on the lobby server sends a system message to the connectivity object on the client (444). This system message includes a connectivity address with address information identifying the service provider, the telephone number of the game server, and call control data (COM port, baud rate, no. of stop bits, parity and flow control). The message also includes the application identifier of the game.
In response to receiving this message, the connectivity object on the user's computer saves the state information of the current connection (446), and creates a connectivity object on behalf of the game application (448). In creating the connectivity object for the game application, the connectivity API initializes the service provider identified in the connectivity address provided in the system message (450). The connectivity API then connects the game application to a session using the Open function on the connectivity object (452). Preferably, the connectivity API only connects the game application to the session if the game application has the focus, meaning that the main window of the game application in the windowing interface of the Windows® operating system is active and responsive to user input. It is important to emphasize that the service provider (sp. 2) used to connect to the game server is likely to be different than the service provider (sp.1) used to connect to the lobby server. To improve game performance, the service provider used to connect to the game session will use a different protocol than TCP/IP. The protocol that the service provider uses for the game session does not have to have any address header and this helps to maximize the amount of bandwidth for application data.
When the user's game application is connected to a session, the user can engage in the multi-player game against other users connected to the session. The above process can be repeated for each of the participants in the game session.
As illustrated in Fig. 4C, the game application on the game server is connected to the game session via the connectivity API and service provider. The connectivity API and service provider on the game server enable the game application to communicate with the client computers involved in the session in the same manner that they communicate with it. Specifically, each of the participating applications communicate using the send/receive communication model explained above. The connectivity API enables an application to restore the state of a user's connection when the game application is no longer participating in the game session. Specifically, the host game application on the server can invoke the RestoreConnection function to restore the connection of a user's computer. Fig. 7 is a block diagram continuing the example of Figs. 6 A and 6B. Fig. 7 shows the operations of the client (the game application and connectivity API) on the left, and the operations of the game server (the game server application and the connectivity API of the game server) on the right. As in Figure 6A, the dashed line represents the communication medium, including the physical connection between the computers and the service providers on each computer. In this case, the service providers used to communicate between the connectivity APIs an each computer are service providers that implement a communication protocol optimized for the game application. The messages passed between the game applications in the session require little or no header for message routing purposes because they are dedicated to the game application. In addition, the physical connection between the game server and the client is preferably a direct modem-to-modem serial connection, as opposed to the slower TCP/IP connection between the client and lobby server on the Internet. The service provider in use on the client computer is the one that was initialized in block
450 of Fig. 6A. The game server also has a version of the same service provider to pass messages to the client on the serial communication link.
During the game, the game application and the game server communicate by invoking the send and receive functions of the connectivity API. In response to the send function, the connectivity API calls the send function of the service provider to instruct it to send the message. Preferably, the service provider sends the message without adding any data (e.g., a header for routing purposes). In response to the receive function, the connectivity API retrieves messages queued for the application. Fig. 7 generally shows the interaction between the connectivity APIs during normal game play. Block 460 represents calls from the client game application to the connectivity API on the client, and block 462 represents operations of the connectivity API.
Similarly, block 464 represents calls from the game server application to the connectivity API, and block 466 represents operations of the connectivity API on the server.
When the client game application terminates, the connectivity API sends a message to the game server indicating that the client application has entered a shut-down process. At this point, the game server can invoke the RestoreConnection function on its connectivity API to restore the previous connection on the client (468). In response to this function call on the game server computer, the connectivity API sends a system message to the connectivity object on the client computer (470). The client connectivity object then uses the state information that it has stored in an MRU list to restore the state of the connection. Specifically, it takes the connectivity address stored in response to the RemoteConnect function from the MRU stack (472), shuts down the current service provider (sp. 2) (474), and creates a new connectivity object (476). In creating the connectivity object, it initializes the service provider (sp. 1) from the previous connection (478). In this particular example of a lobby on the Internet, the connectivity address includes the service provider GUID, the application GUID of the lobby client, the telephone number of the Internet service provider, and the URL of the lobby. Finally, the connectivity API posts a message for the lobby client to provide it with a pointer to the new connectivity object established for the TCP/IP connection (480). Thus, when the lobby client regains the focus, its connection with the lobby server on the Internet has been restored.
The connectivity API also includes code to restore the state of a previous connection when a game application loses the focus or terminates. This is implemented as a user-settable option in the connectivity API that the game application program can expose to the user in the form of a dialog box. The user can set the connectivity API to restore the state of a previous connection when the application program terminates, loses the focus, or loses the focus and some specified period of time elapses after loss of the focus.
If the user enables the feature for restoring upon loss of focus, the connectivity API monitors the state of the focus in the operating system. In the implementation for the Windows® Operating System, the connectivity API determines whether the application program has the focus through its window handle, which is an identifier referring to an application program's user interface window. Using window handles, the connectivity API monitors for changes in focus by intercepting messages from the operating system destined for an application's window (482). The connectivity API hooks messages corresponding to user input from the operating system to the application's window (484). These messages indicate which application is active and currently responsive to user input. An alternative way of monitoring for changes in focus is to use operating system services of the Windows® Operating System, namely a shell hook, to receive notifications about changes in focus from one application to another.
The process of monitoring for termination of the application is similar in that the operating system signals an event indicating that the application has terminated or failed. The connectivity API monitors for this event hooking messages from the operating system.
When the connectivity API detects that the game application has lost the focus or is terminated (and the restore option is enabled), it will restore the state of the previous connection, which it has stored in a most-recently-used stack (MRU) (See blocks 472-480 in Fig. 7). If the user has selected to only restore the previous connection after a specified period of time, the connectivity API activates a timer to keep track of the elapsed time after the application loses the focus. Then, if the application should regain the focus before the timer reaches the specified time, the timer is reset. Otherwise, if the timer reaches the specified time, then the connectivity API proceeds to restore the previous connection, using the connectivity address stored in the MRU stack. One specific example of the lobby client in the above-scenario is an Internet browser accessing a lobby server at a Web site on the Internet. In this example, the lobby client is the Internet browser, and the lobby is implemented at a Web server on the Internet. The browser creates a lobby object and a connectivity object so that its counterpart connectivity object running on the Web server can communicate with it via the message model of the connectivity API. Specifically, the browser needs to create a connectivity object on the client so that the lobby server can invoke functions of the connectivity API remotely.
The lobby server application can also be implemented on a web page using a scripting language like Visual Basic® Script from Microsoft Corp. One possible implementation is to implement the connectivity object of the lobby server as an ActiveX control and the lobby itself as a Web page stored on the Web server. The ActiveX control is a program module (either a dynamic linked library or executable program) implemented to comply with the Component Object Model (COM) specification. This control is installed on the client computer and activated when the browser renders the Web page of the lobby, downloaded from the Web server. Specifically, when the browser renders the page, it finds a reference (e.g., an object tag) to the ActiveX control and loads the control.
The interaction between the server connectivity object (the ActiveX control) and the client connectivity object occurs when the browser executes the script in the lobby web page. When the user selects a game application on the web page, for example, the browser executes the script code that invokes the RemoteConnect function through the Active X control interface. In turn, the ActiveX control on the client sends a system message to the client connectivity object. The client connectivity object then handles the switching of protocols as described above and illustrated in Fig. 6B.
Connectivity Object Structures and Functions The following section provides implementation guidelines for the RemoteConnect and
RestoreConnection functions and related data structures described above.
RemoteConnect
This method is called to change the protocol and address that a remote client is using to communicate.
HRESULT RemoteConnect (
LPGUID lpguidNewSP, LPCVOID IpDpAddress, DWORD dwDpAddress Size)
Parameters lpguidNewSP
Pointer to the GUID representing the service provider to be switched to.
IpDpAddress
Pointer to the start of the DirectPlay address buffer, representing the new address to be switched to. This address is in the context of the service provider specified by lpguidNewSp. dwDpAddressSize
The size, in bytes, of the address data.
Returns DP OK
DPERR INVALH) OBJECT
DPERR INVALID PARAMS
DPERR UNAVAILABLE
DPERR GENERIC DPERR EXCEPTION
RestoreConnection
This function is called to restore the original connection after it has been changed successfully with a RemoteConnect call. HRESULT RestoreConnection(void)
Returns
DP OK
DPERR INVALID OBJECT DPERR NOTHING TO RESTORE DPERR EXCEPTION
Conclusion
The invention provides a method for switching communication protocols between a client computer and remote computers. The method establishes a first connection with a first remote computer according to a first communication protocol. A first process executing on the client computer receives a connectivity address from the first remote computer via the first connection, and the connectivity address provides information to establish a second communication link with a second host computer. The method uses the connectivity address to establish a second connection
wifh a second remote computer automatically and without prompting a user for address information. The second connection employs a second communication protocol which is different than the first communication protocol.
The invention provides a variety of enhancements to this method. In one enhancement, the method automatically restores the state of the first connection. In response to receiving the connectivity address, the method stores the connectivity state of the first connection. When the second connection is terminated, the method automatically restores the first connection using the stored connectivity state of the first connection without prompting the user for address information. In another enhancement, the first connection is made using a first service provider program that implements the first protocol. In particular, the connectivity address includes a first service provider identifier identifying a second service provider program that implements the second protocol. In response to receiving the connectivity address, the method loads the second service provider program. It uses the second service provider program to communicate data over the second connection according to the second protocol. In yet another enhancement, the method switches to a protocol capable of sending data at a higher rate. The first connection is made using a modem connected to the client computer and the first communication protocol is TCP/IP, and the second connection is made using the modem connected to the client computer. The second communication protocol communicates by passing messages without adding a message header or other routing information to route the messages to the second remote computer. As such, it achieves a higher data transfer rate than TCP/IP protocol.
In another enhancement, the first and second communication protocol send data in packets and the second communication protocol uses fewer bits per packet to represent address information than the first communication protocol.
The method further enables a remote computer to switch application programs on the local computer. Initially, the client computer executes a first application, which uses the first connection to communicate with the first remote computer. The method receives an identifier of a second application from the first remote computer. In response to receiving the identifier of the second application, it launches the second application. The client computer then executes the second application, which uses the second connection to communicate with the second remote computer. The method may be implemented in an API. In one implementation, the first process comprises an API program executing on the client computer. The API program establishes the second connection by terminating a first service provider program that implements the first protocol and launching a second service provider program that implements the second protocol. The API program is responsive to application programs executing on the client computer to receive device independent function calls to send and receive messages to the remote computers, where the device independent calls are independent of the device and communication protocols used to send the messages.
The programming interface has a variety of features. For example in one implementation, the API program establishes the second connection in response to a message sent by an API executing on the first remote computer. This message comprises the connectivity address including an identifier of the second service provider program and a telephone number or network address.
The API executing on the first remote computer is operable to send the message in response to a remote connection function call from an application program executing on the first remote computer.
The API executing on the client computer is also operable to save state information of the first connection, and is responsive to a system message from an API executing on a remote computer to restore the state of the first connection.
The method may be adapted to switch communication protocols in response to changes in input focus. In this case, the client computer executes a multi-tasking operating system that allows changes in focus among multi-tasking application programs. The API executing on the client computer maintains state information about current and previous connections with remote computers. This state information includes an identifier of an application program that is using the connection to communicate with a remote computer. The API is operable to monitor the focus of the operating system, and is operable to restore a previous connection automatically in response to detecting that the application program whose identifier is associated with the current connection no longer has the focus.
The method may be used to restore the state of a previous connection in response to detecting that an application program has terminated. In one implementation, the API executing on the client computer maintains state information about current and previous connections with remote computers, including an identifier of an application program that is using the connection to communicate with a remote computer. The API is operable to restore a previous connection automatically in response to detecting that the application program whose identifier is associated with the current connection has terminated.
The method is preferably implemented in software, namely, instructions stored on a computer readable medium. The invention also provides an API on a computer readable medium. The API comprises a remote connection function operable to receive a function call from an application program specifying a connectivity address. In response to such a function call, the API sends a system message with the connectivity address to a compatible version of the device-independent API executing on a remote computer. To accomplish this message transfer, the API uses a first service provider program that implements a first communication protocol to send the system message. The system message with the connectivity address causes the compatible API to switch from the first communication protocol to a second protocol identified in the connectivity address. The API
furfher includes programming code for retrieving and queuing messages from the compatible version of the API on a remote computer, and programming code operable to retrieve queued messages. Finally, the API includes programming code operable to switch from the first communication protocol to another communication protocol in response to retrieving a queued system message with a connectivity address by launching a second service provider program identified in the connectivity address.
The API may include a variety of enhancements. In one enhancement, it comprises programming code for storing state information about previous connections with remote computers. It also includes a restore connection function operable to receive a restore connection function call from an application program to restore a connection of a remote computer with another computer. The restore connection function is operable to send a system message to a compatible version of the device-independent API executing on a remote computer. To accomplish this message transfer, it uses a selected service provider program that implements a selected communication protocol to send the system message. The system message is operable to cause the compatible API to restore state of a previous connection on the remote computer. The API further includes programming code operable to restore state of a previous connection in response to retrieving a queued system message by launching a service provider program identified in the stored state information. In another enhancement, the API further comprises:
1. programming code for storing state information about previous connections with remote computers;
2. programming code for storing state information about a current connection with a remote computer, including an application program identifier identifying an application program that is currently using the API to communicate with a remote computer; and
3. programming code for restoring state of a previous connection when the application program, identified in the state information for the current connection, is terminated.
In one implementation, the programming for restoring the state of the previous connection includes programming for determining a service provider identifier for the previous connection from the state information for the previous connection and automatically loading the service provider for the previous connection without prompting a user for input. In another implementation, the API further includes:
1. programming code for storing state information about previous connections with remote computers;
2. programming code for storing state information about a current connection with a remote computer, including an application program identifier identifying an application program that is currently using the API to communicate with a remote computer;
3. programming code for monitoring whether the identified application program has the focus; and
4. programming for restoring state of a previous connection when the identified application program loses the focus by determining a service provider identifier for the previous connection from the state information and automatically loading the service provider for the previous connection without prompting a user for input. The programming for restoring state of a previous connection may also include programming for determining whether a pre-specified period of time has elapsed after the identified application program loses focus and for restoring the state of the previous connection only when the pre-specified period of time has elapsed without the identified application program re-gaining the focus. The invention also provides an API on a computer readable medium comprising a remote connection function operable to receive a function call from an application program specifying a connectivity address, and in response, operable to send a system message with the connectivity address to a compatible version of the device-independent API executing on a remote computer by using a first service provider program that implements a first communication protocol to send the system message. The system message with the connectivity address is operable to cause the compatible API to switch from the first communication protocol to a second protocol identified in the connectivity address. The API also includes programming code for queuing messages from the compatible version of the API on a remote computer, and programming code operable to retrieve queued messages. It further includes programming code operable to switch from the first communication protocol to another communication protocol in response to retrieving a queued system message with a connectivity address by launching a second service provider program identified in the connectivity address. In addition, it includes programming code for storing state information about previous connections with remote computers. It also includes a restore connection function operable to receive a restore connection function call from an application program to restore a connection of a remote computer with another computer. The restore connection function is operable to send a system message to a compatible version of the device- independent API executing on a remote computer by using a selected service provider program that implements a selected communication protocol to send the system message. The system message is operable to cause the compatible API to restore state of a previous connection on the remote computer. In addition, the API includes programming code operable to restore state of a previous connection in response to retrieving a queued system message by launching a service provider program identified in the stored state information.
In view of the many possible embodiments to which the principles of our invention may be applied, it should be recognized that the illustrated embodiment is only a preferred example of the invention and should not be taken as a limitation on the scope of the invention. Rather, the scope of the invention is defined by the following claims. We therefore claim as our invention all that comes within the scope and spirit of these claims.
Claims
1. A method for switching communication protocols between a client computer and remote computers, the method comprising: establishing a first connection with a first remote computer according to a first communication protocol; in a first process executing on the client computer, receiving a connectivity address from the first remote computer via the first connection, wherein the connectivity address provides information to establish a second communication link with a second host computer; using the connectivity address to establish a second connection with a second remote computer automatically and without prompting a user for address information, where the second connection employs a second communication protocol and the second communication protocol is different than the first communication protocol.
2. The method of claim 1 further including: in response to receiving the connectivity address, storing connectivity state of the first connection; and when the second connection is terminated, automatically restoring the first connection using the stored connectivity state of the first connection without prompting the user for address information.
3. The method of claim 1 wherein the first connection is made using a first service provider program that implements the first protocol, and wherein the connectivity address includes a first service provider identifier identifying a second service provider program that implements the second protocol; in response to receiving the connectivity address, loading the second service provider program; and using the second service provider program to communicate data over the second connection according to the second protocol.
4. The method of claim 1 wherein the first connection is made using a modem connected to the client computer and the first communication protocol is TCP/IP; and wherein the second connection is made using the modem connected to the client computer and the second communication protocol communicates by passing messages without adding a message header or other routing information to route the messages to the second remote computer.
5. The method of claim 1 wherein the first and second communication protocol send data in packets and the second communication protocol uses fewer bits per packet to represent address information than the first communication protocol.
6. The method of claim 1 further including: executing a first application on the client computer, where the first application uses the first connection to communicate with the first remote computer; receiving an identifier of a second application from the first remote computer; in response to receiving the identifier of the second application, launching the second application; and executing the second application, where the second application uses the second connection to communicate with the second remote computer.
7. The method of claim 1 wherein the first process comprises an application programming interface program executing on the client computer, and wherein the application programming interface program establishes the second connection by terminating a first service provider program that implements the first protocol and launching a second service provider program that implements the second protocol; wherein the application programming interface program is responsive to application programs executing on the client computer to receive device independent function calls to send and receive messages to the remote computers, where the device independent calls are independent of the device and communication protocols used to send the messages.
8. The method of claim 7 wherein the application programming interface program establishes the second connection in response to a message sent by an application programming interface executing on the first remote computer, where the message includes the connectivity address including an identifier of the second service provider program and a telephone number or network address.
9. The method of claim 8 wherein the application programming interface executing on the first remote computer is operable to send the message in response to a remote connection function call from an application program executing on the first remote computer.
10. The method of claim 8 wherein the application programming interface executing on the client computer is operable to save state information of the first connection, and is responsive to a system message from an application programming interface executing on a remote computer to restore the state of the first connection.
11. The method of claim 8 wherein the client computer is executing a multi-tasking operating system that allows changes in focus among multi-tasking application programs; wherein the application programming interface executing on the client computer maintains state information about current and previous connections with remote computers, including an identifier of an application program that is using the connection to communicate with a remote computer, and is operable to monitor the focus of the operating system, and is operable to restore a previous connection automatically in response to detecting that the application program whose identifier is associated with the current connection no longer has the focus.
12. The method of claim 8 wherein the application programming interface executing on the client computer maintains state information about current and previous connections with remote computers, including an identifier of an application program that is using the connection to communicate with a remote computer, and is operable to restore a previous connection automatically in response to detecting that the application program whose identifier is associated with the current connection has terminated.
13. A computer readable medium having instructions for performing the steps of claim 1.
14. A computer readable medium having an application programming interface program comprising: a remote connection function operable to receive a function call from an application program specifying a connectivity address, and in response, operable to send a system message with the connectivity address to a compatible version of the device-independent application programming interface executing on a remote computer by using a first service provider program that implements a first communication protocol to send the system message, where the system message with the connectivity address is operable to cause the compatible application programming interface to switch from the first communication protocol to a second protocol identified in the connectivity address; programming code for queuing messages from the compatible version of the application programming interface on a remote computer; programming code operable to retrieve queued messages; and programming code operable to switch from the first communication protocol to another communication protocol in response to retrieving a queued system message with a connectivity address by launching a second service provider program identified in the connectivity address.
15. The computer readable medium of claim 14 wherein the application programming interface further comprises: programming code for storing state information about previous connections with remote computers; a restore connection function operable to receive a restore connection function call from an application program to restore a connection of a remote computer with another computer, the restore connection function operable to send a system message to a compatible version of the device-independent application programming interface executing on a remote computer by using a selected service provider program that implements a selected communication protocol to send the system message, where the system message is operable to cause the compatible application programming interface to restore state of a previous connection on the remote computer; and programming code operable to restore state of a previous connection in response to retrieving a queued system message by launching a service provider program identified in the stored state information.
16. The computer readable medium of claim 14 wherein the application programming interface further comprises: programming code for storing state information about previous connections with remote computers; programming code for storing state information about a current connection with a remote computer, including an application program identifier identifying an application program that is currently using the application programming interface to communicate with a remote computer; programming code for restoring state of a previous connection when the application program, identified in the state information for the current connection, is terminated.
17. The computer readable medium of claim 16 wherein the programming for restoring the state of the previous connection includes programming for determining a service provider identifier for the previous connection from the state information for the previous connection and automatically loading the service provider for the previous connection without prompting a user for input.
18. The computer readable medium of claim 16 wherein the application programming interface further includes: programming code for storing state information about previous connections with remote computers; programming code for storing state information about a current connection with a remote computer, including an application program identifier identifying an application program that is currently using the application programming interface to communicate with a remote computer; programming code for monitoring whether the identified application program has the focus; and programming for restoring state of a previous connection when the identified application program loses the focus by determining a service provider identifier for the previous connection from the state information and automatically loading the service provider for the previous connection without prompting a user for input.
19. The computer readable medium of claim 18 wherein the programming for restoring state of a previous connection includes programming for determining whether a pre-specified period of time has elapsed after the identified application program loses focus and for restoring the state of the previous connection only when the pre-specified period of time has elapsed without the identified application program re-gaining the focus.
20. A computer readable medium having an application programming interface program comprising: a remote connection function operable to receive a function call from an application program specifying a connectivity address, and in response, operable to send a system message with the connectivity address to a compatible version of the device-independent application programming interface executing on a remote computer by using a first service provider program that implements a first communication protocol to send the system message, where the system message with the connectivity address is operable to cause the compatible application programming interface to switch from the first communication protocol to a second protocol identified in the connectivity address; programming code for queuing messages from the compatible version of the application programming interface on a remote computer; programming code operable to retrieve queued messages; programming code operable to switch from the first communication protocol to another communication protocol in response to retrieving a queued system message with a connectivity address by launching a second service provider program identified in the connectivity address. programming code for storing state information about previous connections with remote computers; a restore connection function operable to receive a restore connection function call from an application program to restore a connection of a remote computer with another computer, the restore connection function operable to send a system message to a compatible version of the device-independent application programming interface executing on a remote computer by using a selected service provider program that implements a selected communication protocol to send the system message, where the system message is operable to cause the compatible application programming interface to restore state of a previous connection on the remote computer; and programming code operable to restore state of a previous connection in response to retrieving a queued system message by launching a service provider program identified in the stored state information.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/128,676 US6463078B1 (en) | 1998-07-22 | 1998-07-22 | Method for switching protocols transparently in multi-user applications |
US09/128,676 | 1998-07-22 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2000005854A1 true WO2000005854A1 (en) | 2000-02-03 |
Family
ID=22436448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/US1999/009289 WO2000005854A1 (en) | 1998-07-22 | 1999-04-29 | Method for switching protocols transparently in multi-user applications |
Country Status (2)
Country | Link |
---|---|
US (2) | US6463078B1 (en) |
WO (1) | WO2000005854A1 (en) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001077849A2 (en) * | 2000-04-06 | 2001-10-18 | International Business Machines Corporation | Multiprotocol handling arrangement |
WO2002040120A2 (en) * | 2000-11-14 | 2002-05-23 | Netamin Communication Corporation | System and method for simultaneous participation in an online forum |
WO2003024054A2 (en) * | 2001-09-10 | 2003-03-20 | International Business Machines Corporation | Inbound connector |
EP1334597A1 (en) * | 2000-10-27 | 2003-08-13 | Terraplay Systems AB | Server for mapping application names to tag values in distributed multi-user application |
WO2003100623A1 (en) | 2002-05-17 | 2003-12-04 | Sony Computer Entertainment America Inc. | Configuration control by automatic communication port selection and switching configuration by switching communication port |
EP1435045A1 (en) * | 2002-05-17 | 2004-07-07 | Sony Computer Entertainment America Inc. | Dynamically switching configuration between network communication architectures |
EP1506491A1 (en) * | 2002-05-17 | 2005-02-16 | Sony Computer Entertainment America Inc. | Dynamic player management |
US7244181B2 (en) | 2000-11-14 | 2007-07-17 | Netamin Communication Corp. | Multi-player game employing dynamic re-sequencing |
EP2012490A1 (en) * | 2007-07-06 | 2009-01-07 | NTT DoCoMo, Inc. | Middleware for use in a client-server architecture |
US8131802B2 (en) | 2007-10-05 | 2012-03-06 | Sony Computer Entertainment America Llc | Systems and methods for seamless host migration |
CN103632453A (en) * | 2012-08-27 | 2014-03-12 | 广州市德信四海电子科技有限公司 | Electronic clearing system of recreation facility |
US8966557B2 (en) | 2001-01-22 | 2015-02-24 | Sony Computer Entertainment Inc. | Delivery of digital content |
US9483405B2 (en) | 2007-09-20 | 2016-11-01 | Sony Interactive Entertainment Inc. | Simplified run-time program translation for emulating complex processor pipelines |
US9516068B2 (en) | 2002-07-31 | 2016-12-06 | Sony Interactive Entertainment America Llc | Seamless host migration based on NAT type |
US10695671B2 (en) | 2018-09-28 | 2020-06-30 | Sony Interactive Entertainment LLC | Establishing and managing multiplayer sessions |
US10765952B2 (en) | 2018-09-21 | 2020-09-08 | Sony Interactive Entertainment LLC | System-level multiplayer matchmaking |
USRE48700E1 (en) | 2002-04-26 | 2021-08-24 | Sony Interactive Entertainment America Llc | Method for ladder ranking in a game |
Families Citing this family (198)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6744773B1 (en) * | 1998-08-13 | 2004-06-01 | Avaya Technology Corp. | Method and apparatus for managing inter-domain addresses between a plurality of domains |
US6574239B1 (en) * | 1998-10-07 | 2003-06-03 | Eric Morgan Dowling | Virtual connection of a remote unit to a server |
US20010013050A1 (en) * | 1999-01-11 | 2001-08-09 | Shah Niraj A. | Buddy list aggregation |
JP3483124B2 (en) * | 1999-01-21 | 2004-01-06 | 船井電機株式会社 | Terminal device |
US7950017B1 (en) * | 1999-04-23 | 2011-05-24 | Avaya Inc. | Apparatus and method for forwarding messages between two applications |
US6763371B1 (en) * | 1999-05-10 | 2004-07-13 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and apparatus for collaborative communication in a communication network |
US6859821B1 (en) * | 1999-07-19 | 2005-02-22 | Groove Networks, Inc. | Method and apparatus for prioritizing data change requests and maintaining data consistency in a distributed computer system equipped for activity-based collaboration |
US6549937B1 (en) * | 1999-07-21 | 2003-04-15 | Microsoft Corporation | System and method for multi-protocol communication in a computer network |
US7065779B1 (en) | 1999-10-13 | 2006-06-20 | Cisco Technology, Inc. | Technique for synchronizing multiple access controllers at the head end of an access network |
FI109400B (en) * | 1999-10-28 | 2002-07-15 | Nokia Corp | A method of maintaining a communication link |
US6687342B1 (en) * | 2000-01-18 | 2004-02-03 | Siemens Information & Communication Networks, Inc. | System and method for retaining client configuration information across the re-installation of any tapi service provider in a tapi 2.1 environment |
US6671728B1 (en) * | 2000-02-18 | 2003-12-30 | G.E. Information Services, Inc. | Abstract initiator |
US8463839B2 (en) | 2000-03-28 | 2013-06-11 | Cybernet Systems Corporation | Distributed computing environment |
US7334038B1 (en) * | 2000-04-04 | 2008-02-19 | Motive, Inc. | Broadband service control network |
US7353295B1 (en) | 2000-04-04 | 2008-04-01 | Motive, Inc. | Distributed services architecture through use of a dynamic service point map |
US6871345B1 (en) | 2000-04-04 | 2005-03-22 | Motive, Inc. | Self managing software agents with introspection |
US6845389B1 (en) * | 2000-05-12 | 2005-01-18 | Nortel Networks Limited | System and method for broadband multi-user communication sessions |
US7024696B1 (en) | 2000-06-14 | 2006-04-04 | Reuben Bahar | Method and system for prevention of piracy of a given software application via a communications network |
US6920497B1 (en) | 2000-07-31 | 2005-07-19 | The Boeing Company | Contacting a broadcast channel |
US6701344B1 (en) * | 2000-07-31 | 2004-03-02 | The Boeing Company | Distributed game environment |
US6732147B1 (en) | 2000-07-31 | 2004-05-04 | The Boeing Company | Leaving a broadcast channel |
US6910069B1 (en) | 2000-07-31 | 2005-06-21 | The Boeing Company | Joining a broadcast channel |
US6714966B1 (en) * | 2000-07-31 | 2004-03-30 | The Boeing Company | Information delivery service |
US8041782B1 (en) | 2000-08-31 | 2011-10-18 | Alcatel Lucent | System of automated configuration of network subscribers for broadband communication |
US6874029B2 (en) | 2000-11-22 | 2005-03-29 | Leap Wireless International, Inc. | Method and system for mediating interactive services over a wireless communications network |
WO2002043404A2 (en) | 2000-11-22 | 2002-05-30 | Leap Wireless International, Inc. | Method and system for providing interactive services over a wireless communications network |
US6981048B1 (en) * | 2000-11-22 | 2005-12-27 | Toshiba America Information Systems, Inc. | Keep-alive messaging when two applications are running |
US7574493B2 (en) * | 2000-11-22 | 2009-08-11 | Cricket Communications, Inc. | Method and system for improving the efficiency of state information transfer over a wireless communications network |
US7194544B2 (en) * | 2000-12-14 | 2007-03-20 | Borland Software Corporation | Method and system for dynamic protocol selection among object-handled specified protocols |
US7251788B2 (en) * | 2000-12-21 | 2007-07-31 | Nokia Corporation | Simulated speed-of-light delay for recreational benefit applications |
US7228342B2 (en) * | 2001-02-20 | 2007-06-05 | Sony Computer Entertainment America Inc. | System for utilizing an incentive point system based on disc and user identification |
US20020116283A1 (en) * | 2001-02-20 | 2002-08-22 | Masayuki Chatani | System and method for transfer of disc ownership based on disc and user identification |
US7039033B2 (en) * | 2001-05-07 | 2006-05-02 | Ixi Mobile (Israel) Ltd. | System, device and computer readable medium for providing a managed wireless network using short-range radio signals |
DE60136448D1 (en) * | 2001-06-22 | 2008-12-18 | Microsoft Corp | Wireless browser |
US7085287B1 (en) | 2001-06-27 | 2006-08-01 | Cisco Technology, Inc. | Map routing technique implemented in access networks |
US7639617B2 (en) | 2001-06-27 | 2009-12-29 | Cisco Technology, Inc. | Upstream physical interface for modular cable modem termination system |
US7688828B2 (en) * | 2001-06-27 | 2010-03-30 | Cisco Technology, Inc. | Downstream remote physical interface for modular cable modem termination system |
US7139923B1 (en) | 2001-06-27 | 2006-11-21 | Cisco Technology, Inc. | Technique for synchronizing network devices in an access data network |
US7209442B1 (en) | 2001-06-27 | 2007-04-24 | Cisco Technology, Inc. | Packet fiber node |
US7356820B2 (en) * | 2001-07-02 | 2008-04-08 | International Business Machines Corporation | Method of launching low-priority tasks |
US20050030917A1 (en) * | 2001-08-17 | 2005-02-10 | Amit Haller | Device, system, method and computer readable medium obtaining a network attribute, such as a DNS address, for a short distance wireless network |
US7016334B2 (en) * | 2001-08-17 | 2006-03-21 | Ixi Mobile ( Israel) Ltd. | Device, system, method and computer readable medium for fast recovery of IP address change |
US7295532B2 (en) * | 2001-08-17 | 2007-11-13 | Ixi Mobile (R & D), Ltd. | System, device and computer readable medium for providing networking services on a mobile device |
US7493363B2 (en) * | 2001-09-19 | 2009-02-17 | Microsoft Corporation | Peer-to-peer group management and method for maintaining peer-to-peer graphs |
US6957045B2 (en) * | 2001-10-26 | 2005-10-18 | Ixi Mobile (Israel) Ltd. | Device, system, computer readable medium and method for providing status information of devices in a short distance wireless network |
US7013112B2 (en) * | 2001-12-18 | 2006-03-14 | Ixi Mobile (Israel) Ltd. | Method, system and computer readable medium for making a business decision in response to information from a short distance wireless network |
US7016648B2 (en) * | 2001-12-18 | 2006-03-21 | Ixi Mobile (Israel) Ltd. | Method, system and computer readable medium for downloading a software component to a device in a short distance wireless network |
US6996620B2 (en) * | 2002-01-09 | 2006-02-07 | International Business Machines Corporation | System and method for concurrent security connections |
US7016978B2 (en) | 2002-04-29 | 2006-03-21 | Bellsouth Intellectual Property Corporation | Instant messaging architecture and system for interoperability and presence management |
US7246178B2 (en) * | 2002-05-07 | 2007-07-17 | Nortel Networks Limited | Methods and systems for changing a topology of a network |
ATE403324T1 (en) * | 2002-05-31 | 2008-08-15 | Nokia Corp | INTERFACE FOR MULTIMEDIA APPLICATION |
US6839790B2 (en) * | 2002-06-21 | 2005-01-04 | Smar Research Corporation | Plug and play reconfigurable USB interface for industrial fieldbus network access |
US20040024822A1 (en) * | 2002-08-01 | 2004-02-05 | Werndorfer Scott M. | Apparatus and method for generating audio and graphical animations in an instant messaging environment |
US7275215B2 (en) * | 2002-07-29 | 2007-09-25 | Cerulean Studios, Llc | System and method for managing contacts in an instant messaging environment |
US6909878B2 (en) * | 2002-08-20 | 2005-06-21 | Ixi Mobile (Israel) Ltd. | Method, system and computer readable medium for providing an output signal having a theme to a device in a short distance wireless network |
US7921160B2 (en) | 2002-09-17 | 2011-04-05 | At&T Intellectual Property I, L.P. | Initiating instant messaging (IM) chat sessions from email messages |
US20040054736A1 (en) * | 2002-09-17 | 2004-03-18 | Daniell W. Todd | Object architecture for integration of email and instant messaging (IM) |
US7035942B2 (en) * | 2002-09-17 | 2006-04-25 | Bellsouth Intellectual Property Corp. | Server-based message protocol translation |
AU2003272486A1 (en) * | 2002-09-17 | 2004-04-08 | Bellsouth Intellectual Property Corporation | Client-based message protocol translation |
US7933957B2 (en) * | 2002-09-17 | 2011-04-26 | At&T Intellectual Property Ii, L.P. | Tracking email and instant messaging (IM) thread history |
US8037141B2 (en) * | 2002-09-17 | 2011-10-11 | At&T Intellectual Property I, L.P. | Instant messaging (IM) internet chat capability from displayed email messages |
US20040078447A1 (en) * | 2002-09-17 | 2004-04-22 | Malik Dale W. | User profiles for managing email and instant messaging (IM) |
US6976092B1 (en) | 2002-09-17 | 2005-12-13 | Bellsouth Intellectual Property Corp. | System that using transport protocol objects located at agent location to generate session ID and to provide translation between different instant messaging protocols |
US7657598B2 (en) * | 2002-09-17 | 2010-02-02 | At&T Intellectual Property I, L.P. | Address book for integrating email and instant messaging (IM) |
US7356571B2 (en) * | 2002-10-07 | 2008-04-08 | Ixi Mobile (R&D), Ltd. | System, method and processor readable medium for downloading information within a predetermined period of time to a device in a network responsive to price selection |
US7734749B2 (en) * | 2002-10-16 | 2010-06-08 | Xerox Corporation | Device model agent |
US7296241B2 (en) * | 2002-10-18 | 2007-11-13 | Microsoft Corporation | System and method for managing a message view |
US7280547B2 (en) | 2002-12-16 | 2007-10-09 | Microsoft Corporation | Dynamic WAN port detection |
US7596625B2 (en) | 2003-01-27 | 2009-09-29 | Microsoft Corporation | Peer-to-peer grouping interfaces and methods |
US7167680B2 (en) * | 2003-02-05 | 2007-01-23 | Ixi Mobile (Israel) Ltd. | Method, system and computer readable medium for adjusting output signals for a plurality of devices in a short distance wireless network responsive to a selected environment |
US7680944B1 (en) * | 2003-02-28 | 2010-03-16 | Comtrol Corporation | Rapid transport service in a network to peripheral device servers |
KR100685962B1 (en) * | 2003-03-03 | 2007-02-23 | 엘지전자 주식회사 | Apparatus and method for recovering network information of home network system |
US7765281B1 (en) | 2003-03-10 | 2010-07-27 | Motive, Inc. | Large-scale targeted data distribution system |
US7430187B2 (en) * | 2003-05-15 | 2008-09-30 | At&T Intellectual Property I, Lp | Methods, systems, and computer program products for providing different quality of service/bandwidth allocation to different susbscribers for interactive gaming |
US7583704B1 (en) | 2003-06-10 | 2009-09-01 | Carl Walker | Synchronizing separated upstream and downstream channels of cable modem termination systems |
US8028073B2 (en) | 2003-06-25 | 2011-09-27 | Oracle International Corporation | Mobile meeting and collaboration |
US7529853B2 (en) * | 2003-06-25 | 2009-05-05 | Oracle International Corporation | Universal IM and presence aggregation on technology-specific client |
US9094805B2 (en) * | 2003-06-25 | 2015-07-28 | Oracle International Corporation | Mobile messaging concierge |
US7310659B1 (en) | 2003-06-27 | 2007-12-18 | Sprint Communications Company L.P. | Interface and method for extending a target application over an instant message link of a communication network |
US7539727B2 (en) * | 2003-07-01 | 2009-05-26 | Microsoft Corporation | Instant messaging object store |
US7363378B2 (en) * | 2003-07-01 | 2008-04-22 | Microsoft Corporation | Transport system for instant messaging |
US7415711B2 (en) * | 2003-08-01 | 2008-08-19 | Microsoft Corporation | System and method for a transport independent gaming API for mobile devices |
US7653911B2 (en) * | 2003-09-05 | 2010-01-26 | Alcatel-Lucent Usa Inc. | Implicit interprocess communications (IPC) versioning support |
US7613835B2 (en) * | 2003-09-08 | 2009-11-03 | Sony Corporation | Generic API for synchronization |
US7925790B2 (en) * | 2003-09-17 | 2011-04-12 | Sony Corporation | Middleware filter agent between server and PDA |
US20050076147A1 (en) * | 2003-09-24 | 2005-04-07 | Blake Michael E. | NMEA 0183 sentence transporter over ethernet |
US7996470B2 (en) | 2003-10-14 | 2011-08-09 | At&T Intellectual Property I, L.P. | Processing rules for digital messages |
US7949996B2 (en) | 2003-10-23 | 2011-05-24 | Microsoft Corporation | Peer-to-peer identity management managed interfaces and methods |
US7716357B2 (en) * | 2003-10-24 | 2010-05-11 | Microsoft Corporation | Service discovery and publication |
US8171084B2 (en) * | 2004-01-20 | 2012-05-01 | Microsoft Corporation | Custom emoticons |
US8688803B2 (en) | 2004-03-26 | 2014-04-01 | Microsoft Corporation | Method for efficient content distribution using a peer-to-peer networking infrastructure |
US7565438B1 (en) * | 2004-03-30 | 2009-07-21 | Sprint Communications Company L.P. | Digital rights management integrated service solution |
US7818679B2 (en) * | 2004-04-20 | 2010-10-19 | Microsoft Corporation | Method, system, and apparatus for enabling near real time collaboration on an electronic document through a plurality of computer systems |
US8184602B2 (en) * | 2004-04-28 | 2012-05-22 | Nokia Corporation | System and associated terminal, method, and computer program product for configuring and updating service access points and providing service content in the mobile domain |
US7539208B2 (en) * | 2004-05-25 | 2009-05-26 | Cisco Technology, Inc. | Timing system for modular cable modem termination system |
US7864686B2 (en) | 2004-05-25 | 2011-01-04 | Cisco Technology, Inc. | Tunneling scheme for transporting information over a cable network |
US7532627B2 (en) | 2004-05-25 | 2009-05-12 | Cisco Technology, Inc. | Wideband upstream protocol |
US7720101B2 (en) | 2004-05-25 | 2010-05-18 | Cisco Technology, Inc. | Wideband cable modem with narrowband circuitry |
US7817553B2 (en) * | 2004-05-25 | 2010-10-19 | Cisco Technology, Inc. | Local area network services in a cable modem network |
US7835274B2 (en) | 2004-05-25 | 2010-11-16 | Cisco Technology, Inc. | Wideband provisioning |
US8149833B2 (en) | 2004-05-25 | 2012-04-03 | Cisco Technology, Inc. | Wideband cable downstream protocol |
US7646786B2 (en) | 2004-05-25 | 2010-01-12 | Cisco Technology, Inc. | Neighbor discovery in cable networks |
US8102854B2 (en) | 2004-05-25 | 2012-01-24 | Cisco Technology, Inc. | Neighbor discovery proxy with distributed packet inspection scheme |
US20050272455A1 (en) * | 2004-06-04 | 2005-12-08 | Nokia Corporation | Management of devices |
US7490299B2 (en) * | 2004-06-30 | 2009-02-10 | International Business Machines Corporation | System and method for handling unexpected focus change messages in a computing device |
US7536486B2 (en) | 2004-07-30 | 2009-05-19 | Microsoft Corporation | Automatic protocol determination for portable devices supporting multiple protocols |
US20090024757A1 (en) * | 2004-07-30 | 2009-01-22 | Proctor David W | Automatic Protocol Determination For Portable Devices Supporting Multiple Protocols |
US8127045B2 (en) | 2004-09-13 | 2012-02-28 | Apple Inc. | Dynamically configurable connection on demand |
US7500200B2 (en) * | 2004-09-15 | 2009-03-03 | International Business Machines Corporation | System and method for instant messenger busy gauge |
US7539732B2 (en) * | 2004-09-15 | 2009-05-26 | International Business Machines Corporation | Client based instant messenger queue limit |
KR100677141B1 (en) * | 2004-10-11 | 2007-02-02 | 삼성전자주식회사 | Apparatus and Method for performing an one to one name-based socket-communication |
US20060085515A1 (en) * | 2004-10-14 | 2006-04-20 | Kevin Kurtz | Advanced text analysis and supplemental content processing in an instant messaging environment |
US7433700B2 (en) * | 2004-11-12 | 2008-10-07 | Microsoft Corporation | Strategies for peer-to-peer instant messaging |
US20060135259A1 (en) * | 2004-12-17 | 2006-06-22 | Nokia Corporation | System, game server, terminal, and method for game event notification in a multiplayer game |
US20060189391A1 (en) * | 2005-01-31 | 2006-08-24 | Bird John M | Gaming machine system and method |
US20060189390A1 (en) * | 2005-01-31 | 2006-08-24 | Bird John M | Shared transport medium system and method for use within a casino or gambling environment |
US20060195532A1 (en) * | 2005-02-28 | 2006-08-31 | Microsoft Corporation | Client-side presence documentation |
US7529255B2 (en) * | 2005-04-21 | 2009-05-05 | Microsoft Corporation | Peer-to-peer multicasting using multiple transport protocols |
US8036140B2 (en) * | 2005-04-22 | 2011-10-11 | Microsoft Corporation | Application programming interface for inviting participants in a serverless peer to peer network |
US7571228B2 (en) * | 2005-04-22 | 2009-08-04 | Microsoft Corporation | Contact management in a serverless peer-to-peer system |
US7630361B2 (en) | 2005-05-20 | 2009-12-08 | Cisco Technology, Inc. | Method and apparatus for using data-over-cable applications and services in non-cable environments |
US7702959B2 (en) * | 2005-08-02 | 2010-04-20 | Nhn Corporation | Error management system and method of using the same |
US8070605B2 (en) * | 2005-09-12 | 2011-12-06 | Bally Gaming International, Inc. | Multi-area progressive gaming system |
US20070064594A1 (en) * | 2005-09-16 | 2007-03-22 | Bellsouth Intellectual Property Corporation | Providing multiple communication protocol failover and remote diagnostics via a customer premise apparatus |
US8141149B1 (en) | 2005-11-08 | 2012-03-20 | Raytheon Oakley Systems, Inc. | Keyword obfuscation |
US8463612B1 (en) * | 2005-11-08 | 2013-06-11 | Raytheon Company | Monitoring and collection of audio events |
US8701017B2 (en) * | 2005-11-18 | 2014-04-15 | Alcatel Lucent | System and method for representation of presentity presence states for contacts in a contact list |
US7701951B2 (en) | 2006-03-06 | 2010-04-20 | Cisco Technology, Inc. | Resource reservation and admission control for IP network |
US8793390B2 (en) * | 2006-05-23 | 2014-07-29 | Blue Coat Systems, Inc. | Systems and methods for protocol detection in a proxy |
US8254648B2 (en) * | 2007-01-04 | 2012-08-28 | General Electric Company | Method for providing adaptive hanging protocols for image reading |
US20080220878A1 (en) * | 2007-02-23 | 2008-09-11 | Oliver Michaelis | Method and Apparatus to Create or Join Gaming Sessions Based on Proximity |
US20090019460A1 (en) * | 2007-05-03 | 2009-01-15 | Qualcomm Incorporated | Application programming interface (api) for handling errors in packets received by a wireless communications receiver |
US8645976B2 (en) * | 2007-05-03 | 2014-02-04 | Qualcomm Incorporated | Application programming interface (API) for restoring a default scan list in a wireless communications receiver |
US8996409B2 (en) | 2007-06-06 | 2015-03-31 | Sony Computer Entertainment Inc. | Management of online trading services using mediated communications |
CN101334778B (en) * | 2007-06-29 | 2011-08-03 | 国际商业机器公司 | Management database connecting method and system |
JP5066608B2 (en) | 2007-07-10 | 2012-11-07 | テレフオンアクチーボラゲット エル エム エリクソン(パブル) | Method for discovering operator-provided network service using IMS |
WO2009143115A1 (en) * | 2008-05-21 | 2009-11-26 | Uniloc Usa, Inc. | Device and method for secured communication |
US8447421B2 (en) * | 2008-08-19 | 2013-05-21 | Sony Computer Entertainment Inc. | Traffic-based media selection |
US8290604B2 (en) * | 2008-08-19 | 2012-10-16 | Sony Computer Entertainment America Llc | Audience-condition based media selection |
US8797854B2 (en) * | 2008-09-29 | 2014-08-05 | Cisco Technology, Inc. | Scheduling for RF over fiber optic cable [RFoG] |
US8869290B2 (en) * | 2010-06-04 | 2014-10-21 | Broadcom Corporation | Method and system for secure content distribution by a broadband gateway |
US20100193135A1 (en) * | 2009-01-30 | 2010-08-05 | Joseph Allen Eckstein | System and Method for High-Speed Continuous Application of a Strip Material to a Moving Sheet-Like Substrate Material at Laterally Shifting Locations |
US8182627B2 (en) * | 2009-01-30 | 2012-05-22 | The Procter & Gamble Company | Method for high-speed continuous application of a strip material to a substrate along an application path on the substrate |
US20100193138A1 (en) * | 2009-01-30 | 2010-08-05 | Joseph Allen Eckstein | System for High-Speed Continuous Application of a Strip Material to a Moving Sheet-Like Substrate Material at Laterally Shifting Locations |
US8171972B2 (en) | 2009-01-30 | 2012-05-08 | The Procter & Gamble Company | Strip guide for high-speed continuous application of a strip material to a moving sheet-like substrate material at laterally shifting locations |
US20100211389A1 (en) * | 2009-02-13 | 2010-08-19 | Kyle Robert Marquardt | System of communication employing both voice and text |
US20100233960A1 (en) * | 2009-03-16 | 2010-09-16 | Brian Tucker | Service discovery functionality utilizing personal area network protocols |
US10277683B2 (en) | 2009-03-16 | 2019-04-30 | Apple Inc. | Multifunctional devices as virtual accessories |
US20100235523A1 (en) * | 2009-03-16 | 2010-09-16 | Robert Garcia | Framework for supporting multi-device collaboration |
US8285860B2 (en) * | 2009-03-16 | 2012-10-09 | Apple Inc. | Efficient service discovery for peer-to-peer networking devices |
US10325266B2 (en) | 2009-05-28 | 2019-06-18 | Sony Interactive Entertainment America Llc | Rewarding classes of purchasers |
US8736462B2 (en) * | 2009-06-23 | 2014-05-27 | Uniloc Luxembourg, S.A. | System and method for traffic information delivery |
US8903653B2 (en) * | 2009-06-23 | 2014-12-02 | Uniloc Luxembourg S.A. | System and method for locating network nodes |
US20100325703A1 (en) * | 2009-06-23 | 2010-12-23 | Craig Stephen Etchegoyen | System and Method for Secured Communications by Embedded Platforms |
US20100321207A1 (en) * | 2009-06-23 | 2010-12-23 | Craig Stephen Etchegoyen | System and Method for Communicating with Traffic Signals and Toll Stations |
US8452960B2 (en) * | 2009-06-23 | 2013-05-28 | Netauthority, Inc. | System and method for content delivery |
US20110016182A1 (en) * | 2009-07-20 | 2011-01-20 | Adam Harris | Managing Gifts of Digital Media |
US8843834B2 (en) * | 2009-08-28 | 2014-09-23 | Apple Inc. | Method and apparatus for initiating and managing chat sessions |
US8418079B2 (en) | 2009-09-01 | 2013-04-09 | James J. Nicholas, III | System and method for cursor-based application management |
US20110134930A1 (en) * | 2009-12-09 | 2011-06-09 | Mclaren Moray | Packet-based networking system |
KR101859235B1 (en) * | 2009-12-15 | 2018-06-28 | 삼성전자주식회사 | System and method of multi-media conferencing between universal plug and play (upnp) enabled telephony devices and wireless area network (wan) devices |
US9205328B2 (en) | 2010-02-18 | 2015-12-08 | Activision Publishing, Inc. | Videogame system and method that enables characters to earn virtual fans by completing secondary objectives |
US8433759B2 (en) | 2010-05-24 | 2013-04-30 | Sony Computer Entertainment America Llc | Direction-conscious information sharing |
US8434134B2 (en) | 2010-05-26 | 2013-04-30 | Google Inc. | Providing an electronic document collection |
US8429674B2 (en) * | 2010-07-20 | 2013-04-23 | Apple Inc. | Maintaining data states upon forced exit |
US8484219B2 (en) | 2010-09-21 | 2013-07-09 | Sony Computer Entertainment America Llc | Developing a knowledge base associated with a user that facilitates evolution of an intelligent user interface |
US8504487B2 (en) | 2010-09-21 | 2013-08-06 | Sony Computer Entertainment America Llc | Evolution of a user interface based on learned idiosyncrasies and collected data of a user |
US8713365B2 (en) | 2011-01-28 | 2014-04-29 | Microsoft Corporation | Re-establishing push notification channels via user identifiers |
US9143722B2 (en) * | 2011-11-22 | 2015-09-22 | Cisco Technology, Inc. | Method and apparatus for providing session description for a media session |
US8856640B1 (en) | 2012-01-20 | 2014-10-07 | Google Inc. | Method and apparatus for applying revision specific electronic signatures to an electronically stored document |
AU2012100463B4 (en) | 2012-02-21 | 2012-11-08 | Uniloc Usa, Inc. | Renewable resource distribution management system |
EP2866753A1 (en) | 2012-06-29 | 2015-05-06 | The Procter & Gamble Company | System and method for high-speed continuous application of a strip material to a moving sheet-like substrate material |
US9529916B1 (en) | 2012-10-30 | 2016-12-27 | Google Inc. | Managing documents based on access context |
US11308037B2 (en) | 2012-10-30 | 2022-04-19 | Google Llc | Automatic collaboration |
US9105178B2 (en) | 2012-12-03 | 2015-08-11 | Sony Computer Entertainment Inc. | Remote dynamic configuration of telemetry reporting through regular expressions |
US9495341B1 (en) | 2012-12-18 | 2016-11-15 | Google Inc. | Fact correction and completion during document drafting |
US9384285B1 (en) | 2012-12-18 | 2016-07-05 | Google Inc. | Methods for identifying related documents |
US9478100B2 (en) * | 2013-03-12 | 2016-10-25 | Igt | Localized remote gaming |
US9514113B1 (en) | 2013-07-29 | 2016-12-06 | Google Inc. | Methods for automatic footnote generation |
US9842113B1 (en) | 2013-08-27 | 2017-12-12 | Google Inc. | Context-based file selection |
US9529791B1 (en) | 2013-12-12 | 2016-12-27 | Google Inc. | Template and content aware document and template editing |
US10376792B2 (en) | 2014-07-03 | 2019-08-13 | Activision Publishing, Inc. | Group composition matchmaking system and method for multiplayer video games |
US9703763B1 (en) | 2014-08-14 | 2017-07-11 | Google Inc. | Automatic document citations by utilizing copied content for candidate sources |
US10118099B2 (en) | 2014-12-16 | 2018-11-06 | Activision Publishing, Inc. | System and method for transparently styling non-player characters in a multiplayer video game |
US10315113B2 (en) | 2015-05-14 | 2019-06-11 | Activision Publishing, Inc. | System and method for simulating gameplay of nonplayer characters distributed across networked end user devices |
US10715584B2 (en) | 2016-06-28 | 2020-07-14 | Microsoft Technology Licensing, Llc | Multiuser application platform |
US10500498B2 (en) | 2016-11-29 | 2019-12-10 | Activision Publishing, Inc. | System and method for optimizing virtual games |
US10193992B2 (en) | 2017-03-24 | 2019-01-29 | Accenture Global Solutions Limited | Reactive API gateway |
US11040286B2 (en) | 2017-09-27 | 2021-06-22 | Activision Publishing, Inc. | Methods and systems for improved content generation in multiplayer gaming environments |
US10561945B2 (en) | 2017-09-27 | 2020-02-18 | Activision Publishing, Inc. | Methods and systems for incentivizing team cooperation in multiplayer gaming environments |
US10974150B2 (en) | 2017-09-27 | 2021-04-13 | Activision Publishing, Inc. | Methods and systems for improved content customization in multiplayer gaming environments |
US10864443B2 (en) | 2017-12-22 | 2020-12-15 | Activision Publishing, Inc. | Video game content aggregation, normalization, and publication systems and methods |
US11679330B2 (en) | 2018-12-18 | 2023-06-20 | Activision Publishing, Inc. | Systems and methods for generating improved non-player characters |
US11097193B2 (en) | 2019-09-11 | 2021-08-24 | Activision Publishing, Inc. | Methods and systems for increasing player engagement in multiplayer gaming environments |
US11712627B2 (en) | 2019-11-08 | 2023-08-01 | Activision Publishing, Inc. | System and method for providing conditional access to virtual gaming items |
US11524234B2 (en) | 2020-08-18 | 2022-12-13 | Activision Publishing, Inc. | Multiplayer video games with virtual characters having dynamically modified fields of view |
US11351459B2 (en) | 2020-08-18 | 2022-06-07 | Activision Publishing, Inc. | Multiplayer video games with virtual characters having dynamically generated attribute profiles unconstrained by predefined discrete values |
CN115396493A (en) * | 2022-08-17 | 2022-11-25 | 融慧金科金融服务外包(北京)有限公司 | Management system and method for distributed dynamic control API (application program interface) overtime response |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0632625A1 (en) * | 1993-06-30 | 1995-01-04 | International Business Machines Corporation | Programmable high performance data communication adapter for high speed packet transmission networks |
EP0714684A1 (en) * | 1994-11-29 | 1996-06-05 | Net Game Limited | Real-time multi-user game communication system using existing cable television infrastructure |
US5659685A (en) * | 1994-12-13 | 1997-08-19 | Microsoft Corporation | Method and apparatus for maintaining network communications on a computer capable of connecting to a WAN and LAN |
EP0797337A2 (en) * | 1996-03-19 | 1997-09-24 | AT&T Corp. | Method for enabling communications between calling and called multimedia terminals |
EP0814589A2 (en) * | 1996-06-19 | 1997-12-29 | AT&T Corp. | System and method for automated network reconfiguration |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA1245361A (en) * | 1984-06-27 | 1988-11-22 | Kerry E. Thacher | Tournament data system |
US4996685A (en) | 1989-04-10 | 1991-02-26 | Bell Communications Research, Inc. | Technique for dynamically changing an ISDN connection during a host session |
JPH03235555A (en) | 1990-02-13 | 1991-10-21 | Hitachi Ltd | Data communication equipment and data communication system |
US6272223B1 (en) * | 1997-10-28 | 2001-08-07 | Rolf Carlson | System for supplying screened random numbers for use in recreational gaming in a casino or over the internet |
US5610910A (en) | 1995-08-17 | 1997-03-11 | Northern Telecom Limited | Access to telecommunications networks in multi-service environment |
US5823879A (en) * | 1996-01-19 | 1998-10-20 | Sheldon F. Goldberg | Network gaming system |
US6128660A (en) * | 1996-03-21 | 2000-10-03 | Hearme | Network match maker |
US6134590A (en) * | 1996-04-16 | 2000-10-17 | Webtv Networks, Inc. | Method and apparatus for automatically connecting devices to a local network |
US6125122A (en) * | 1997-01-21 | 2000-09-26 | At&T Wireless Svcs. Inc. | Dynamic protocol negotiation system |
US6152824A (en) * | 1997-03-06 | 2000-11-28 | Mpath Interactive, Inc. | Online gaming architecture |
US6106399A (en) * | 1997-06-16 | 2000-08-22 | Vr-1, Inc. | Internet audio multi-user roleplaying game |
US5984787A (en) * | 1997-06-17 | 1999-11-16 | International Business Machines Corp. | Method and system for multi-user game recovery |
US6203427B1 (en) * | 1997-07-03 | 2001-03-20 | Walker Digital, Llc | Method and apparatus for securing a computer-based game of chance |
US6196920B1 (en) * | 1998-03-31 | 2001-03-06 | Masque Publishing, Inc. | On-line game playing with advertising |
-
1998
- 1998-07-22 US US09/128,676 patent/US6463078B1/en not_active Expired - Lifetime
-
1999
- 1999-04-29 WO PCT/US1999/009289 patent/WO2000005854A1/en active Application Filing
-
2002
- 2002-08-09 US US10/215,866 patent/US7197049B2/en not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0632625A1 (en) * | 1993-06-30 | 1995-01-04 | International Business Machines Corporation | Programmable high performance data communication adapter for high speed packet transmission networks |
EP0714684A1 (en) * | 1994-11-29 | 1996-06-05 | Net Game Limited | Real-time multi-user game communication system using existing cable television infrastructure |
US5659685A (en) * | 1994-12-13 | 1997-08-19 | Microsoft Corporation | Method and apparatus for maintaining network communications on a computer capable of connecting to a WAN and LAN |
EP0797337A2 (en) * | 1996-03-19 | 1997-09-24 | AT&T Corp. | Method for enabling communications between calling and called multimedia terminals |
EP0814589A2 (en) * | 1996-06-19 | 1997-12-29 | AT&T Corp. | System and method for automated network reconfiguration |
Cited By (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001077849A3 (en) * | 2000-04-06 | 2002-04-18 | Ibm | Multiprotocol handling arrangement |
WO2001077849A2 (en) * | 2000-04-06 | 2001-10-18 | International Business Machines Corporation | Multiprotocol handling arrangement |
EP1334597A1 (en) * | 2000-10-27 | 2003-08-13 | Terraplay Systems AB | Server for mapping application names to tag values in distributed multi-user application |
US7244181B2 (en) | 2000-11-14 | 2007-07-17 | Netamin Communication Corp. | Multi-player game employing dynamic re-sequencing |
WO2002040120A2 (en) * | 2000-11-14 | 2002-05-23 | Netamin Communication Corporation | System and method for simultaneous participation in an online forum |
WO2002040120A3 (en) * | 2000-11-14 | 2002-09-26 | Netamin Comm Corp | System and method for simultaneous participation in an online forum |
US8966557B2 (en) | 2001-01-22 | 2015-02-24 | Sony Computer Entertainment Inc. | Delivery of digital content |
WO2003024054A2 (en) * | 2001-09-10 | 2003-03-20 | International Business Machines Corporation | Inbound connector |
WO2003024054A3 (en) * | 2001-09-10 | 2003-10-30 | Ibm | Inbound connector |
USRE48803E1 (en) | 2002-04-26 | 2021-11-02 | Sony Interactive Entertainment America Llc | Method for ladder ranking in a game |
USRE48802E1 (en) | 2002-04-26 | 2021-11-02 | Sony Interactive Entertainment America Llc | Method for ladder ranking in a game |
USRE48700E1 (en) | 2002-04-26 | 2021-08-24 | Sony Interactive Entertainment America Llc | Method for ladder ranking in a game |
US7792902B2 (en) | 2002-05-17 | 2010-09-07 | Sony Computer Entertainment America Llc | Managing participants in an online session |
US10659500B2 (en) | 2002-05-17 | 2020-05-19 | Sony Interactive Entertainment America Llc | Managing participants in an online session |
US7421471B2 (en) | 2002-05-17 | 2008-09-02 | Sony Computer Entertainment America Inc. | Configuration switching: dynamically changing between network communication architectures |
EP1506485A4 (en) * | 2002-05-17 | 2008-11-12 | Sony Comp Entertainment Us | Configuration control by automatic communication port selection and switching configuration by switching communication port |
WO2003100623A1 (en) | 2002-05-17 | 2003-12-04 | Sony Computer Entertainment America Inc. | Configuration control by automatic communication port selection and switching configuration by switching communication port |
US7606920B2 (en) | 2002-05-17 | 2009-10-20 | Sony Computer Entertainment America Inc. | Method and apparatus for controlling communication ports for an online session of a multi-user application by associating each of the ports with a protocol and designating an active port |
EP1506491A4 (en) * | 2002-05-17 | 2005-08-17 | Sony Comp Emtertainment Us | Dynamic player management |
US7831666B2 (en) | 2002-05-17 | 2010-11-09 | Sony Computer Entertainment America Inc. | Managing participants in an online session |
EP1435045A1 (en) * | 2002-05-17 | 2004-07-07 | Sony Computer Entertainment America Inc. | Dynamically switching configuration between network communication architectures |
EP1435045B1 (en) * | 2002-05-17 | 2013-05-08 | Sony Computer Entertainment America LLC | Dynamically switching configuration between network communication architectures |
EP1506485A1 (en) * | 2002-05-17 | 2005-02-16 | Sony Computer Entertainment America Inc. | Configuration control by automatic communication port selection and switching configuration by switching communication port |
EP1506491A1 (en) * | 2002-05-17 | 2005-02-16 | Sony Computer Entertainment America Inc. | Dynamic player management |
US7373380B2 (en) | 2002-05-17 | 2008-05-13 | Sony Computer Entertainment America, Inc. | Methods and systems for configuration and dynamically switching between network communication architectures |
US9762631B2 (en) | 2002-05-17 | 2017-09-12 | Sony Interactive Entertainment America Llc | Managing participants in an online session |
US8972548B2 (en) | 2002-07-31 | 2015-03-03 | Sony Computer Entertainment America Llc | Systems and methods for seamless host migration |
US9729621B2 (en) | 2002-07-31 | 2017-08-08 | Sony Interactive Entertainment America Llc | Systems and methods for seamless host migration |
US9516068B2 (en) | 2002-07-31 | 2016-12-06 | Sony Interactive Entertainment America Llc | Seamless host migration based on NAT type |
EP2012490A1 (en) * | 2007-07-06 | 2009-01-07 | NTT DoCoMo, Inc. | Middleware for use in a client-server architecture |
US9483405B2 (en) | 2007-09-20 | 2016-11-01 | Sony Interactive Entertainment Inc. | Simplified run-time program translation for emulating complex processor pipelines |
US8131802B2 (en) | 2007-10-05 | 2012-03-06 | Sony Computer Entertainment America Llc | Systems and methods for seamless host migration |
US10547670B2 (en) | 2007-10-05 | 2020-01-28 | Sony Interactive Entertainment America Llc | Systems and methods for seamless host migration |
US10063631B2 (en) | 2007-10-05 | 2018-08-28 | Sony Interactive Entertainment America Llc | Systems and methods for seamless host migration |
US11228638B2 (en) | 2007-10-05 | 2022-01-18 | Sony Interactive Entertainment LLC | Systems and methods for seamless host migration |
CN103632453A (en) * | 2012-08-27 | 2014-03-12 | 广州市德信四海电子科技有限公司 | Electronic clearing system of recreation facility |
US10765952B2 (en) | 2018-09-21 | 2020-09-08 | Sony Interactive Entertainment LLC | System-level multiplayer matchmaking |
US10695671B2 (en) | 2018-09-28 | 2020-06-30 | Sony Interactive Entertainment LLC | Establishing and managing multiplayer sessions |
US11364437B2 (en) | 2018-09-28 | 2022-06-21 | Sony Interactive Entertainment LLC | Establishing and managing multiplayer sessions |
Also Published As
Publication number | Publication date |
---|---|
US7197049B2 (en) | 2007-03-27 |
US20030214943A1 (en) | 2003-11-20 |
US6463078B1 (en) | 2002-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2000005854A1 (en) | Method for switching protocols transparently in multi-user applications | |
US5931913A (en) | Methods, system and computer program products for establishing a session between a host and a terminal using a reduced protocol | |
US5625678A (en) | Method and system for allowing switched voice and data communication among multiple application programs | |
US7080120B2 (en) | System and method for collaborative processing of distributed applications | |
US7971207B2 (en) | Method, system, and computer program product for representing and connection-oriented device in a known format | |
US7321925B2 (en) | Load balancing and fault tolerance for server-based software applications | |
US6658469B1 (en) | Method and system for switching between network transport providers | |
EP2538637A2 (en) | Multi-path transmission control protocol proxy service | |
US8806030B2 (en) | Multichannel connections in file system sessions | |
KR100686705B1 (en) | Method and apparatus for providing multi-client support in a SIP-enabled terminal | |
US6247068B1 (en) | Winsock-data link library transcoder | |
JP2001523864A (en) | Server operating system that supports multiple client-server sessions and dynamic reconnection of users to previous sessions | |
CN111064771B (en) | Network request processing method and system | |
JPH09120381A (en) | Communication driver subsystem for selective orientation of communication at inside of digital computer system | |
US6088729A (en) | Method, system, and computer program product for establishing dialogs in an intraconnect data communication | |
US20030063121A1 (en) | Determining availability of participants or techniques for computer-based communication | |
US20020099795A1 (en) | System and method for maintaining two-way asynchronous notification between a client and a web server | |
US20030065723A1 (en) | Computer-based communication using multiple communications channels | |
US20030065955A1 (en) | Selection and interconnection of computer-based communications techniques | |
US7742398B1 (en) | Information redirection | |
Attanasio et al. | A Virtual Multiprocessor Implemented by an Encapsulated Cluster of Loosly Coupled Computers | |
US6002864A (en) | Host addresses a client device using permanent name provided by the client device without requiring a transfer of an APPC verb | |
CN100336373C (en) | Remote file transmission method | |
US7516408B2 (en) | Method, system and program for switching between various computer-based communication techniques | |
CN113176957B (en) | Remote application automation system based on RPC |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AK | Designated states |
Kind code of ref document: A1 Designated state(s): JP |
|
AL | Designated countries for regional patents |
Kind code of ref document: A1 Designated state(s): AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE |
|
121 | Ep: the epo has been informed by wipo that ep was designated in this application | ||
DFPE | Request for preliminary examination filed prior to expiration of 19th month from priority date (pct application filed before 20040101) | ||
122 | Ep: pct application non-entry in european phase |