Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (480)
Games in Android Showcase (110)
games submitted by our members
Games in WIP (547)
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 2638 times)
0 Members and 1 Guest are viewing this topic.
Offline jibbylala

Senior Newbie





« Posted 2011-05-02 16: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.

 

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

The first screenshot will be displayed as a thumbnail.

atombrot (23 views)
2014-08-19 09:29:53

Tekkerue (22 views)
2014-08-16 06:45:27

Tekkerue (21 views)
2014-08-16 06:22:17

Tekkerue (12 views)
2014-08-16 06:20:21

Tekkerue (19 views)
2014-08-16 06:12:11

Rayexar (57 views)
2014-08-11 02:49:23

BurntPizza (37 views)
2014-08-09 21:09:32

BurntPizza (29 views)
2014-08-08 02:01:56

Norakomi (36 views)
2014-08-06 19:49:38

BurntPizza (66 views)
2014-08-03 02:57:17
List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
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!