Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (404)
games submitted by our members
Games in WIP (289)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  The Simplest and Easiest Game Network layer with KRYONET  (Read 1661 times)
0 Members and 1 Guest are viewing this topic.
Offline jibbylala

Senior Newbie





« Posted 2011-05-02 18:41:54 »

Hi all,
Hope u all are fine =), I created a simple network layer with kryonet, this can work as a sample application for kryonet.

Game state:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
package org.multiuser.simulation.ballPhysics;
/**
 *
 * @author Jibbylala
 */

public class BallState {
   /**
    *
    */

   private float X;
   private float Y;

   public BallState() {
     
   }
   
   public BallState(int x, int y) {
      this.X = x;
      this.Y = y;
   }
   
   public void setX(float f)
   {
      this.X = f;
   }
   
   public void setY(float y)
   {
      this.Y = y;
   }
   
     @Override
       public String toString() {
           
               return "Ball X (" + X + ")"+ ", Y(" + Y + ")";
         
       }
}

The Client:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
package org.physics.balls;

import java.io.IOException;

import org.multiuser.simulation.ballPhysics.BallState;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;

/**
 *
 * @author Jibbylala
 */

public class SimulationClient {

   private Client simulationClient;

   private boolean connected = false;

   public SimulationClient() {

      try {
         simulationClient = new Client();
         simulationClient.start();

         Kryo kryo = simulationClient.getKryo();
         kryo.register(BallState.class);

         simulationClient.addListener(new Listener() {
            public void received(Connection connection, Object object) {
               if (object instanceof BallState) {
                  BallState ball = (BallState) object;
                  System.out
                        .println("Received Ball : " + ball.toString());
               }
            }
         });
      } catch (Exception e) {
         e.printStackTrace();
      }

      new Thread("Connect") {
         public void run() {
            try {
               simulationClient.connect(5000, Common.DEFAULT_IP,
                     Common.DEFAULT_PORT_TCP);
            } catch (IOException ex) {
               ex.printStackTrace();
               System.exit(1);
            }

         }
      }.start();

   }

   public static void main(String[] argv) {
      try {
         new SimulationClient();

      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

The Server:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
package org.physics.balls;

import java.awt.Color;

import java.io.IOException;

import java.util.Random;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server;

import org.multiuser.simulation.ballPhysics.BallState;

/**
 *
 * @author Jibbylala
 */


public class SimulationServer implements Runnable {

   

        public static final int BOX_WIDTH = 640;
   public static final int BOX_HEIGHT = 480;  
        public static final int BALLS = 1;

        private static BallState BS = new BallState(10, 5);
        public boolean running = true;
   private volatile boolean Play = true;
   private long mFrameDelay = 564;
   private Box box; // The container box
  private Ball[] balls = new Ball[BALLS];

   private int port = 54555;

   private Server server;

   public SimulationServer() throws Exception {

      server = new Server();

      Thread gameThread = new Thread(this);

      Kryo kryo = server.getKryo();
      server.addListener(new Listener() {
         public void received(Connection c, Object object) {

         }

         public void disconnected(Connection c) {

         }
      });

      server.bind(port);
      server.start();
      gameThread.start();
      // keep server running
     while (running) {
         Thread.sleep(100);
      }
      System.out.println("server started");
   }

   @Override
   public void run() {
      while (Play == true) {
         System.out.println("Sending game state process start");
         int radius = 40;
         Random rand = new Random();
         int angleInDegree = rand.nextInt(360);
         box = new Box(0, 0, BOX_WIDTH, BOX_HEIGHT);
         balls[0] = new Ball(BS, "ball" + 0, 0, 50, 40, 14, angleInDegree,
               Color.yellow);

         for (int i = 0; i < BALLS; i++) {
            balls[i].move();
            try {
               balls[i].collideWith(box);
               System.out.println("Sending object state : " + BS);
               server.sendToAllTCP(BS);
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
         try {
            Thread.sleep(mFrameDelay);
         } catch (InterruptedException ie) {
         }
      }
   }

       public static void main(String[] args) {
      try {
         new SimulationServer();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

}



enjoy!


P.S: I m sending this time single object, I will update this for sending the multiple objects (array of objects) and some complex objects, which exploit KRYO Serialization capabilities.
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars and Titan!

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (34 views)
2013-05-17 21:29:12

alaslipknot (42 views)
2013-05-16 21:24:48

gouessej (72 views)
2013-05-16 00:53:38

gouessej (71 views)
2013-05-16 00:17:58

theagentd (79 views)
2013-05-15 15:01:13

theagentd (74 views)
2013-05-15 15:00:54

StreetDoggy (116 views)
2013-05-14 15:56:26

kutucuk (139 views)
2013-05-12 17:10:36

kutucuk (140 views)
2013-05-12 15:36:09

UnluckyDevil (148 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.262 seconds with 20 queries.