Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (498)
Games in Android Showcase (115)
games submitted by our members
Games in WIP (562)
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  
  correct way to create a packetHandler class  (Read 1644 times)
0 Members and 1 Guest are viewing this topic.
Offline zidsal

Senior Newbie





« Posted 2013-12-25 23:48:18 »

In my game every packet type has a enum value assigned to it (so when packets come in between the server and the client I can tell what the packet is meant for e.g. is it a login packet, or a ping packet). My server currently has a class to handle the packets that the server gets sent:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
public class PacketHandler {
   
   public static void HandlePacket(byte[] data, InetAddress ipAddress, int port){
      String message = PacketUtils.GetDataFromByteStream(data);
      Packets type = PacketUtils.GetPacketIdFromByteStream(data);
     
      switch(type) {
         case INVALID:
                                //do whatever if we get an invalid packet
           break;
         case ALIVE:
                                //do whatever if we get an alive packet
           break;
         case DISCONNECT:
                                //do whatever if we get an disconnect packet
           break;
         default:
            break;
      }
   }


in the switch statement we will perform whatever action we need to depending on what packet we recieve. My problem is this is really going to be hard to maintain. Is there a better and cleaner way of doing this. Having all of this code in one file is going to make this file really big.

Any inputs into the matter would be amazing. I really want to know what are some cleaner ways of doing this expecally from a OOPS stand point.
Offline Sethir

Senior Newbie


Exp: 3 years



« Reply #1 - Posted 2013-12-26 01:19:05 »

You could use a HashMap. Register your detail packet handler classes in the map and your HandlePacket method just execute their doAction method.
Something along those lines:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
Map<Packet, DetailPacketHandler> handlerMap =  new HashMap<Packet, DetailPacketHandler>();

public PacketHandler(){
  handlerMap.put(INVALID, new InvalidPacketHandler());
  handlerMap.put(ALIVE, new AlivePacketHandler());
  handlerMap.put(new DisconnectedPacketHandler());
}

public void HandlePacket(byte[] data, InetAddress ipAddress, int port){
  String message = PacketUtils.GetDataFromByteStream(data);
  Packets type = PacketUtils.GetPacketIdFromByteStream(data);
 
  DetailPacketHandler currentHandler = (DetailPacketHandler) handlerMap.get(type);
  if (currentHandler != null) {
    currentHandler.doAction(message, ipAddress, port);
  } else {
    // fallback in here
 }
}


At least I manage my game states that way
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.

radar3301 (11 views)
2014-09-21 23:33:17

BurntPizza (28 views)
2014-09-21 02:42:18

BurntPizza (18 views)
2014-09-21 01:30:30

moogie (20 views)
2014-09-21 00:26:15

UprightPath (27 views)
2014-09-20 20:14:06

BurntPizza (29 views)
2014-09-19 03:14:18

Dwinin (46 views)
2014-09-12 09:08:26

Norakomi (74 views)
2014-09-10 13:57:51

TehJavaDev (102 views)
2014-09-10 06:39:09

Tekkerue (50 views)
2014-09-09 02:24:56
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!