diff --git a/Mage.Common/src/mage/interfaces/ChatClient.java b/Mage.Common/src/mage/interfaces/ChatClient.java deleted file mode 100644 index a99cd0925ed..00000000000 --- a/Mage.Common/src/mage/interfaces/ChatClient.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and documentation are those of the -* authors and should not be interpreted as representing official policies, either expressed -* or implied, of BetaSteward_at_googlemail.com. -*/ - -package mage.interfaces; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.UUID; - -/** - * - * @author BetaSteward_at_googlemail.com - */ -public interface ChatClient extends Remote { - - public void receiveMessage(String message) throws RemoteException; - public String getName() throws RemoteException; - public UUID getId() throws RemoteException; - -} diff --git a/Mage.Common/src/mage/interfaces/Client.java b/Mage.Common/src/mage/interfaces/Client.java deleted file mode 100644 index e5f2b4cca1b..00000000000 --- a/Mage.Common/src/mage/interfaces/Client.java +++ /dev/null @@ -1,48 +0,0 @@ -/* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and documentation are those of the -* authors and should not be interpreted as representing official policies, either expressed -* or implied, of BetaSteward_at_googlemail.com. -*/ - -package mage.interfaces; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.UUID; - -/** - * - * @author BetaSteward_at_googlemail.com - */ -public interface Client extends Remote { - - public UUID getId() throws RemoteException; - public UUID getPlayerId() throws RemoteException; - public void gameStarted(UUID gameId, UUID playerId) throws RemoteException; - public String getUserName() throws RemoteException; - public void watchGame(UUID gameId) throws RemoteException; - public void replayGame(UUID gameId) throws RemoteException; - -} diff --git a/Mage.Common/src/mage/interfaces/GameClient.java b/Mage.Common/src/mage/interfaces/GameClient.java deleted file mode 100644 index bc543c64d58..00000000000 --- a/Mage.Common/src/mage/interfaces/GameClient.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and documentation are those of the -* authors and should not be interpreted as representing official policies, either expressed -* or implied, of BetaSteward_at_googlemail.com. -*/ - -package mage.interfaces; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.UUID; -import mage.view.AbilityPickerView; -import mage.view.CardsView; -import mage.view.GameView; - -/** - * - * @author BetaSteward_at_googlemail.com - */ -public interface GameClient extends Remote { - - public UUID getId() throws RemoteException; - public void update(GameView gameView) throws RemoteException; - public void init(GameView gameView) throws RemoteException; - public void ask(String question, GameView gameView) throws RemoteException; - public void inform(String message, GameView gameView) throws RemoteException; - public void target(String message, CardsView cardView, boolean required, GameView gameView) throws RemoteException; - public void gameOver(String message) throws RemoteException; - public void select(String message, GameView gameView) throws RemoteException; - public void playMana(String message, GameView gameView) throws RemoteException; - public void playXMana(String message, GameView gameView) throws RemoteException; - public void chooseAbility(AbilityPickerView abilityView) throws RemoteException; - public void choose(String message, String[] choices) throws RemoteException; - public void revealCards(String name, CardsView cards) throws RemoteException; - public void getAmount(int min, int max) throws RemoteException; -} diff --git a/Mage.Common/src/mage/interfaces/GameReplayClient.java b/Mage.Common/src/mage/interfaces/GameReplayClient.java deleted file mode 100644 index 798c979fdb1..00000000000 --- a/Mage.Common/src/mage/interfaces/GameReplayClient.java +++ /dev/null @@ -1,48 +0,0 @@ -/* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and documentation are those of the -* authors and should not be interpreted as representing official policies, either expressed -* or implied, of BetaSteward_at_googlemail.com. -*/ - -package mage.interfaces; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.UUID; -import mage.view.GameView; - -/** - * - * @author BetaSteward_at_googlemail.com - */ -public interface GameReplayClient extends Remote { - - public UUID getId() throws RemoteException; - public void update(GameView game) throws RemoteException; - public void init(GameView gameView) throws RemoteException; - public void gameOver(String message) throws RemoteException; - public void message(String message) throws RemoteException; - -} diff --git a/Mage.Common/src/mage/interfaces/Server.java b/Mage.Common/src/mage/interfaces/Server.java index 44413a4d3f9..a125fce69db 100644 --- a/Mage.Common/src/mage/interfaces/Server.java +++ b/Mage.Common/src/mage/interfaces/Server.java @@ -30,21 +30,22 @@ package mage.interfaces; import java.rmi.Remote; import java.rmi.RemoteException; -import java.rmi.AccessException; import java.util.Collection; import java.util.List; import java.util.UUID; import mage.Constants.DeckType; import mage.cards.decks.DeckCardLists; +import mage.interfaces.callback.CallbackServer; import mage.view.TableView; /** * * @author BetaSteward_at_googlemail.com */ -public interface Server extends Remote { +public interface Server extends Remote, CallbackServer { - public UUID registerClient(Client c) throws RemoteException, MageException; +// public String getClientIp() throws RemoteException, MageException; + public UUID registerClient(String userName, UUID clientId) throws RemoteException, MageException; public void deregisterClient(UUID sessionId) throws RemoteException, MageException; public String[] getGameTypes() throws RemoteException, MageException; @@ -63,8 +64,8 @@ public interface Server extends Remote { //chat methods public void sendChatMessage(UUID chatId, String userName, String message) throws RemoteException, MageException; - public void joinChat(UUID chatId, ChatClient chatClient) throws RemoteException, MageException; - public void leaveChat(UUID chatId, UUID clientId) throws RemoteException, MageException; + public void joinChat(UUID chatId, UUID sessionId, String userName) throws RemoteException, MageException; + public void leaveChat(UUID chatId, UUID sessionId) throws RemoteException, MageException; public UUID getTableChatId(UUID tableId) throws RemoteException, MageException; public UUID getGameChatId(UUID gameId) throws RemoteException, MageException; public UUID getRoomChatId(UUID roomId) throws RemoteException, MageException; @@ -74,9 +75,9 @@ public interface Server extends Remote { //game methods public void startGame(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException; - public void joinGame(UUID gameId, UUID sessionId, GameClient gameClient) throws RemoteException, MageException; - public void watchGame(UUID gameId, UUID sessionId, GameClient gameClient) throws RemoteException, MageException; - public void stopWatching(UUID gameId, UUID clientId) throws RemoteException, MageException; + public void joinGame(UUID gameId, UUID sessionId) throws RemoteException, MageException; + public void watchGame(UUID gameId, UUID sessionId) throws RemoteException, MageException; + public void stopWatching(UUID gameId, UUID sessionId) throws RemoteException, MageException; public void sendPlayerUUID(UUID gameId, UUID sessionId, UUID data) throws RemoteException, MageException; public void sendPlayerString(UUID gameId, UUID sessionId, String data) throws RemoteException, MageException; public void sendPlayerBoolean(UUID gameId, UUID sessionId, Boolean data) throws RemoteException, MageException; @@ -84,7 +85,7 @@ public interface Server extends Remote { public void concedeGame(UUID gameId, UUID sessionId) throws RemoteException, MageException; //replay methods - public void replayGame(UUID gameId, UUID sessionId, GameReplayClient replayClient) throws RemoteException, MageException; + public void replayGame(UUID sessionId) throws RemoteException, MageException; public void stopReplay(UUID sessionId) throws RemoteException, MageException; public void nextPlay(UUID sessionId) throws RemoteException, MageException; public void previousPlay(UUID sessionId) throws RemoteException, MageException; diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackClient.java b/Mage.Common/src/mage/interfaces/callback/CallbackClient.java new file mode 100644 index 00000000000..5a8fe25b3c5 --- /dev/null +++ b/Mage.Common/src/mage/interfaces/callback/CallbackClient.java @@ -0,0 +1,39 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.interfaces.callback; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public interface CallbackClient { + + public void processCallback(ClientCallback callback); + +} diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackClientDaemon.java b/Mage.Common/src/mage/interfaces/callback/CallbackClientDaemon.java new file mode 100644 index 00000000000..0dc97b365b3 --- /dev/null +++ b/Mage.Common/src/mage/interfaces/callback/CallbackClientDaemon.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.interfaces.callback; + +import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class CallbackClientDaemon extends Thread { + + private static ExecutorService callbackExecutor = Executors.newCachedThreadPool(); + private final CallbackClient client; + private final CallbackServer server; + private final UUID id; + + public CallbackClientDaemon(UUID id, CallbackClient client, CallbackServer server) { + this.client = client; + this.server = server; + this.id = id; + setDaemon(true); + start(); + } + + @Override + public void run() { + try { + while(true) { + final ClientCallback callback = server.callback(id); + callbackExecutor.submit( + new Runnable() { + @Override + public void run() { + client.processCallback(callback); + } + } + ); + } + } catch(Exception ex) { + System.out.print(ex.getMessage()); + } + } +} diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackServer.java b/Mage.Common/src/mage/interfaces/callback/CallbackServer.java new file mode 100644 index 00000000000..f3e1b8ce35c --- /dev/null +++ b/Mage.Common/src/mage/interfaces/callback/CallbackServer.java @@ -0,0 +1,42 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.interfaces.callback; + +import java.rmi.RemoteException; +import java.util.UUID; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public interface CallbackServer { + + public ClientCallback callback(UUID clientId) throws RemoteException; + +} diff --git a/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java b/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java new file mode 100644 index 00000000000..fac2be70aed --- /dev/null +++ b/Mage.Common/src/mage/interfaces/callback/CallbackServerSession.java @@ -0,0 +1,148 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.interfaces.callback; + +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.logging.Logger; +import mage.util.Logging; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class CallbackServerSession { + +// private final ClientCallback callback = new ClientCallback(); +// private Boolean waiting = false; +// +// /** +// * +// * blocks the thread until a callback is requested +// * +// * @return ClientCallback - the callback requested +// */ +// public ClientCallback callback() { +// //TODO: use ReentrantLock instead +// do { +// callback.clear(); +// synchronized(callback) { +// try { +// waiting = true; +// callback.wait(); +// waiting.notify(); +// waiting = false; +// } catch (InterruptedException ex) {} +// } +// } while (callback.getMethod() == null); +// return callback; +// } +// +// /** +// * +// * requests a callback +// * +// * @param call - the callback to request +// */ +// public void setCallback(ClientCallback call) { +// //TODO: use ReentrantLock instead - wait until a lock is aquired by another thread before setting method and data +// synchronized(waiting) { +// if (!waiting) { +// try { +// waiting.wait(); +// } catch (InterruptedException ex) {} +// } +// } +// +// synchronized(callback) { +// callback.setMethod(call.getMethod()); +// callback.setData(call.getData()); +// callback.notify(); +// } +// } + + + + private final static Logger logger = Logging.getLogger(CallbackServerSession.class.getName()); + + private final ClientCallback callback = new ClientCallback(); + private final ReentrantLock lock = new ReentrantLock(); + private final Condition waiting = lock.newCondition(); + private final Condition callbackCalled = lock.newCondition(); + private boolean waitingForCallback; + + /** + * + * blocks the thread until a callback is requested + * + * @return ClientCallback - the callback requested + */ + public ClientCallback callback() throws InterruptedException { + callback.clear(); + lock.lock(); + try { + waitingForCallback = true; + waiting.signal(); + while (callback.getMethod() == null) { + logger.fine("waiting for callback"); + callbackCalled.await(); + } + waitingForCallback = false; + logger.fine("callback called:" + callback.getMethod()); + return callback; + } + finally { + lock.unlock(); + } + } + + /** + * + * requests a callback + * + * @param call - the callback to request + */ + public void setCallback(ClientCallback call) throws InterruptedException { + lock.lock(); + try { + while (!waitingForCallback) { + logger.fine("waiting for callback state to call:" + call.getMethod()); + waiting.await(); + } + callback.setMethod(call.getMethod()); + callback.setData(call.getData()); + callbackCalled.signal(); + } + finally { + lock.unlock(); + } + } + +} diff --git a/Mage.Common/src/mage/interfaces/callback/ClientCallback.java b/Mage.Common/src/mage/interfaces/callback/ClientCallback.java new file mode 100644 index 00000000000..af027b29d9b --- /dev/null +++ b/Mage.Common/src/mage/interfaces/callback/ClientCallback.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.interfaces.callback; + +import java.io.Serializable; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class ClientCallback implements Serializable { + + private Object data; + private String method; + + public ClientCallback() {} + + public ClientCallback(String method, Object data) { + this.method = method; + this.data = data; + } + + public void clear() { + method = null; + data = null; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + +} diff --git a/Mage.Common/src/mage/view/ChatMessage.java b/Mage.Common/src/mage/view/ChatMessage.java new file mode 100644 index 00000000000..5be2789457e --- /dev/null +++ b/Mage.Common/src/mage/view/ChatMessage.java @@ -0,0 +1,55 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.view; + +import java.io.Serializable; +import java.util.UUID; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class ChatMessage implements Serializable { + + private UUID chatId; + private String message; + + public ChatMessage(UUID chatId, String message) { + this.chatId = chatId; + this.message = message; + } + + public String getMessage() { + return message; + } + + public UUID getChatId() { + return chatId; + } +} diff --git a/Mage.Common/src/mage/view/GameClientMessage.java b/Mage.Common/src/mage/view/GameClientMessage.java new file mode 100644 index 00000000000..b6bcb1b2738 --- /dev/null +++ b/Mage.Common/src/mage/view/GameClientMessage.java @@ -0,0 +1,112 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.view; + +import java.io.Serializable; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class GameClientMessage implements Serializable { + + private GameView gameView; + private CardsView cardsView; + private String message; + private AbilityPickerView abilityView; + private boolean flag; + private String[] strings; + private int min; + private int max; + + public GameClientMessage(GameView gameView) { + this.gameView = gameView; + } + + public GameClientMessage(GameView gameView, String message) { + this.gameView = gameView; + this.message = message; + } + + public GameClientMessage(GameView gameView, String question, CardsView cardView, boolean required) { + this.gameView = gameView; + this.message = question; + this.cardsView = cardView; + this.flag = required; + } + + public GameClientMessage(String[] choices, String message) { + this.strings = choices; + this.message = message; + } + + public GameClientMessage(String message, int min, int max) { + this.message = message; + this.min = min; + this.max = max; + } + + public GameClientMessage(CardsView cardView, String name) { + this.cardsView = cardView; + this.message = name; + } + + public GameView getGameView() { + return gameView; + } + + public CardsView getCardsView() { + return cardsView; + } + + public String getMessage() { + return message; + } + + public AbilityPickerView getAbilityView() { + return abilityView; + } + + public boolean isFlag() { + return flag; + } + + public String[] getStrings() { + return strings; + } + + public int getMin() { + return min; + } + + public int getMax() { + return max; + } + +}