1 package net.sourceforge.simplegamenet.connectaline;
2
3 import java.io.Serializable;
4 import net.sourceforge.simplegamenet.specs.model.GameServer;
5 import net.sourceforge.simplegamenet.specs.model.ServerEngine;
6 import net.sourceforge.simplegamenet.specs.to.PlayerSettings;
7
8 public class CALServer extends GameServer implements CALPacketCodes,
9 CALPlayStyle {
10
11 private CALPlayField cALPlayField = null;
12 private Integer[] originPlayerIDs;
13
14 public CALServer(ServerEngine serverEngine) {
15 super(serverEngine);
16 }
17
18 public void playerAdded(PlayerSettings playerSettings) {
19 if (serverEngine.isGamePlaying()) {
20 serverEngine.sendData(playerSettings.getPlayerID(),
21 new CALPacket(PLAY_FIELD, cALPlayField));
22 }
23 }
24
25 public void playerRemoved(PlayerSettings playerSettings) {
26 if (serverEngine.isGamePlaying()
27 && playerSettings.getPlayingState() == PlayerSettings.PARTICIPATING) {
28 serverEngine.appendGameChatMessage("The game is remise.");
29 serverEngine.stopGame();
30 }
31 }
32
33 public void gameStarted() {
34 int originPlayerIDsLength;
35 int playStyle;
36 int randomNumber;
37 CALSettings cALSettings;
38 Integer[] participantsOrder;
39
40 cALSettings = (CALSettings) serverEngine.getGameSettings();
41 originPlayerIDs = serverEngine.getPlayerSettingsMap()
42 .getParticipantIDs();
43 participantsOrder = new Integer[originPlayerIDs.length];
44 originPlayerIDsLength = originPlayerIDs.length;
45 for (int i = 0; i < participantsOrder.length; i++) {
46 randomNumber = (int) (Math.random() * (originPlayerIDsLength));
47 participantsOrder[i] = originPlayerIDs[randomNumber];
48 for (int j = randomNumber; j < originPlayerIDsLength - 1; j++) {
49 originPlayerIDs[j] = originPlayerIDs[j + 1];
50 }
51 originPlayerIDsLength--;
52 }
53 cALPlayField = new CALPlayField(cALSettings.getNumberOfColumns(),
54 cALSettings.getNumberOfRows(),
55 cALSettings.getLengthOfALine(),
56 participantsOrder);
57 CALPacket cALPacket = new CALPacket(INIT, participantsOrder);
58 sendCALPacket(cALPacket);
59 }
60
61 public void receiveData(Integer playerID, Serializable data) {
62 CALPacket cALPacket = (CALPacket) data;
63 CALSettings cALSettings = (CALSettings) serverEngine.getGameSettings();
64 switch (cALPacket.getCalPacketCode()) {
65 case RESULT_TURN_BY_PLAYER:
66 int[] coordinates = (int[]) cALPacket.cALData;
67 switch (cALSettings.getPlayStyle()) {
68 case GRAVITY:
69 if (cALPlayField.isMoveAllowedGravity(coordinates[0],
70 coordinates[1])) {
71 cALPlayField.makeMove(coordinates[0], coordinates[1],
72 playerID);
73 if (cALPlayField.isWinner(coordinates[0],
74 coordinates[1])) {
75 sendCALPacket(new CALPacket(WINNER, coordinates));
76 serverEngine.appendGameChatMessage(serverEngine.getPlayerSettingsMap()
77 .getPlayerSettings(playerID).getNickname()
78 + " has won the game.");
79 serverEngine.stopGame();
80 } else if (cALPlayField.isRemise()) {
81 sendCALPacket(new CALPacket(REMISE, coordinates));
82 serverEngine.appendGameChatMessage("Remise");
83 serverEngine.stopGame();
84 } else {
85 sendCALPacket(new CALPacket(MAKE_MOVE_BY_PLAYER,
86 coordinates));
87 }
88 }
89 break;
90 case ANY_EMPTY_SPOT:
91 if (cALPlayField.isMoveAllowedAnyEmptySpot(coordinates[0],
92 coordinates[1])) {
93 cALPlayField.makeMove(coordinates[0], coordinates[1],
94 playerID);
95 if (cALPlayField.isWinner(coordinates[0],
96 coordinates[1])) {
97 sendCALPacket(new CALPacket(WINNER, coordinates));
98 serverEngine.appendGameChatMessage(serverEngine.getPlayerSettingsMap()
99 .getPlayerSettings(playerID).getNickname()
100 + " has won the game.");
101 serverEngine.stopGame();
102 } else if (cALPlayField.isRemise()) {
103 sendCALPacket(new CALPacket(REMISE, coordinates));
104 serverEngine.appendGameChatMessage("Remise");
105 serverEngine.stopGame();
106 } else {
107 sendCALPacket(new CALPacket(MAKE_MOVE_BY_PLAYER,
108 coordinates));
109 }
110 }
111 break;
112 }
113 break;
114 case RESULT_TURN_BY_CLIENT:
115 break;
116 default:
117 System.out.println("Unrecognized packet");
118 }
119 }
120
121 public void sendCALPacket(CALPacket cALPacket) {
122 serverEngine.sendData(cALPacket);
123 }
124
125 public void gameAborted() {
126 serverEngine.appendGameChatMessage("Remise");
127 }
128 }