What's New in Director 8.5 > Using the Shockwave Multiuser Server and Xtra > Using databases > Storing information

 

Storing information

Once you have decided what types of objects to use, it is time to store your data. You start by creating a new object, and then you add attributes to the object. The attributes will be whatever items of information you want to store, such as an e-mail address or a high score. As with other server functions, these operations are performed by sending commands to the server in the #recipient parameter of a sendNetMessage() and indicating which type of object you want to create or edit.

Keep in mind that you can set different combinations of attributes for different objects. You could assign user Bob #email and #favoriteFood attributes but assign user Mary #email and #favoritePlace attributes. What attributes you define and the information you put into them is up to you and what you want your movie to do. Object attributes can contain any Lingo value you wish to store.

You might want to start by storing user-specific information in a DBUser object. Since the DBUser object for the new user does not yet exist, you must tell the server to create it for you. This is one of several administrative functions you can perform on the server by specifying DBAdmin as the object of your command. To create a new DBUser object for a new user, use createUser in conjunction with DBAdmin:

errCode = gMultiuserInstance.sendNetMessage("system.DBAdmin.createUser", "anySubject", [#userID: "Bob", #password: "MySecret", #userlevel: 20])

This creates a new DBUser object with a #userID property of Bob.

To add new information to the new user's DBUser object, you must name the information, which becomes an attribute of the user. If you are storing e-mail addresses, you could call the attribute #email. The attribute name should be a symbol preceded by the # sign. You declare a new attribute by using declareAttribute with the DBAdmin object. Once an attribute has been declared, its name may be used with any of the database object types.

errCode = gMultiuserInstance.sendNetMessage("system.DBAdmin. declareAttribute", "anySubject", [#attribute: #email])

Now the attribute named #email has been declared and may be set for any of the objects you create. To set the e-mail address in the database that was created earlier for the user Bob, use setAttribute with the DBUser object:

errCode = gMultiuserInstance.sendNetMessage("system.DBUser.setAttribute", "anySubject", [#userID: "Bob", #attribute: [#email: "bobsmith@companyname.com"]])

The #content parameter of this sendNetMessage() is a nested property list containing the parameters for the setAttribute command. The #userID property tells the server which user's information is being edited. The #attribute property indicates which attributes are being set and is followed by a list of attributes and values. In this case, only one attribute is being set.

To create a DBApplication object and set its attributes, you start by creating a new object, using createApplication, and then declaring the attributes you want to use for the object. You then place information into those attributes with setAttribute. You add attributes to a DBPlayer object by supplying both #userID and #application properties with setAttribute. See Multiuser Lingo Dictionary overview for detailed examples of these.

To construct DBApplicationData objects, you put all the data you want them to hold in the form of lists of attributes and then write them to the server as an administrator-level user with createApplicationData.

This Lingo statement creates a DBApplicationData object containing values that describe a room in an online casino:

errCode = gMultiuserInstance.sendNetMessage("system.DBAdmin. createApplicationData", "anySubject", [#application: "Casino", #attribute: [#roomName: "BlackJack", #dealerName: "Larry", #wallArt: "Mona Lisa", #minimumBet: 50, #music: "Classical"]])

Subsequent Lingo statements might create additional DBApplicationData objects with the attributes for additional rooms in the casino.

Once you have placed the objects on the server, you retrieve them for use in the movie by using getApplicationData. This command returns the list of attributes and values for the object that matches the criteria you specify for the current application. To retrieve the DBApplicationData object you previously created, you would specify the attribute #roomName and the string BlackJack as the search criteria. You supply the string in the #text property.

errCode = gMultiuserInstance.sendNetMessage ( "system.DBApplication.getApplicationData", "anySubject", [#application: "Casino", #attribute: "#roomName", #text: "BlackJack"] )

In addition to the attributes you define, DBUser, DBPlayer, and DBApplication objects each have their own default attributes that are assigned by the server. There are no default attributes for DBApplicationData objects.

DBUser objects include these attributes:

#userID must be unique.

#password can be accessed with getAttribute and setAttribute, but only by users with an appropriate user level.

#lastLoginTime is changed by the server each time a user logs in and can be edited by an administrator-level user. See Configuring the server for more information.

#status can be written only by administrators and can be used for whatever purposes you see fit. You might use this to keep track of whether a customer's balance is due or paid in full for a site membership subscription.

#userlevel determines privileges based on the levels you define in the server's configuration file. See Configuring the server. This attribute may be changed only by administrators.

#lastUpdateTime allows you to check whether other users have changed an attribute since you last checked it. This is identical to the way this is used with group attributes. See Working with group attributes.

DBPlayer objects include default attributes of #creationTime and #lastUpdateTime. The #creationTime attribute indicates when the object was created on the server and will usually correspond to when the user began participating in a particular movie.

DBApplication objects include default attributes of #userID, #description, and #lastUpdateTime. The #userID attribute defaults to the name of the movie that created the object, which you supplied in the connectToNetServer() command. The #description attribute contains whatever description you choose to supply when you create the DBApplication object.