public VMEODGameCompDrawACardPlugin(VMEODServer server) : base(server) { // create a default deck until data is retrieved from the server Game = new CarducopiaDrawACardGame(); // Initialize Mode to the unused mode of the plugin Mode = VMEODGameCompDrawACardModes.CopyDeck; // event listeners & handlers BinaryHandlers["DrawCard_Delete_Card"] = DeleteCurrentCardHandler; BinaryHandlers["DrawCard_Edit_Frequency"] = SetCardFrequencyHandler; BinaryHandlers["DrawCard_Goto_Card"] = GotoCardHandler; BinaryHandlers["DrawCard_Edit_Card"] = EditCurrentCardHandler; BinaryHandlers["DrawCard_Add_Card"] = PushNewCardHandler; BinaryHandlers["DrawCard_Edit_Game"] = EditGameHandler; PlaintextHandlers["DrawCard_Close"] = CloseHandler; // try to get the data from the server server.vm.GlobalLink.LoadPluginPersist(server.vm, server.Object.PersistID, server.PluginID, (byte[] data) => { lock (this) { if (data == null) { Data = new VMEODGameCompDrawACardData(); ResponseFromServer = true; } else { Data = new VMEODGameCompDrawACardData(data); // make a new game based on the received data Game = new CarducopiaDrawACardGame(Data); // update the UI ResponseFromServer = true; } } if (!UIInitialized) { switch (Mode) { case VMEODGameCompDrawACardModes.Manage: { UIInitialized = true; UserClient.Send("DrawCard_Update_Deck", GetDeckListBoxData()); UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData()); UserClient.Send("DrawCard_Manage", GetGameInfoMessage()); break; } case VMEODGameCompDrawACardModes.ViewCurrent: { UIInitialized = true; // send the card matching the last index UserClient.Send("DrawCard_Drawn", GetCurrentCardData()); break; } case VMEODGameCompDrawACardModes.ViewDeck: { UIInitialized = true; UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData()); UserClient.Send("DrawCard_Info", GetGameInfoMessage()); break; } case VMEODGameCompDrawACardModes.Draw: { UIInitialized = true; // randomly draw a card int index = DrawCard.Next(0, Game.UniqueCardCount); Game.GotoCard(index); DeckHasChanged = true; // send new card text to UI UserClient.Send("DrawCard_Drawn", GetCurrentCardData()); break; } } } }); }
/* * When the client connects, the value of temp0 found in TempRegisters[0] determines which interaction is being executed on the object * Only the item's owner should be able to "Manage Deck"; where TempRegisters[0] == 0 * @param:client — the VMEODClient sending the connect event */ public override void OnConnection(VMEODClient client) { base.OnConnection(client); UserClient = client; // find what the user wants to do based on the value of temp0 var args = UserClient.Invoker.Thread.TempRegisters; /* "Manage Deck" */ if (args[0] == (short)VMEODGameCompDrawACardModes.Manage) { Mode = VMEODGameCompDrawACardModes.Manage; if (ResponseFromServer) { UIInitialized = true; UserClient.Send("DrawCard_Update_Deck", GetDeckListBoxData()); UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData()); UserClient.Send("DrawCard_Manage", GetGameInfoMessage()); } else { UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode }); } } /* "View Current Card" */ else if (args[0] == (short)VMEODGameCompDrawACardModes.ViewCurrent) { Mode = VMEODGameCompDrawACardModes.ViewCurrent; if (ResponseFromServer) { UIInitialized = true; // send the card matching the last index UserClient.Send("DrawCard_Drawn", GetCurrentCardData()); } else { UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode }); } } /* "View Deck Info" */ else if (args[0] == (short)VMEODGameCompDrawACardModes.ViewDeck) { Mode = VMEODGameCompDrawACardModes.ViewDeck; if (ResponseFromServer) { UIInitialized = true; UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData()); UserClient.Send("DrawCard_Info", GetGameInfoMessage()); } else { UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode }); } } /* "Draw a Card" */ else //if (args[0] == (short)VMEODGameCompDrawACardModes.Draw) { Mode = VMEODGameCompDrawACardModes.Draw; if (ResponseFromServer) { UIInitialized = true; // randomly draw a card int index = DrawCard.Next(0, Game.UniqueCardCount); Game.GotoCard(index); DeckHasChanged = true; // send new card text to UI UserClient.Send("DrawCard_Drawn", GetCurrentCardData()); } else { UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode }); } } }