Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (476)
Games in Android Showcase (106)
games submitted by our members
Games in WIP (533)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
   Home   Help   Search   Login   Register   
  Show Posts
Pages: [1] 2
1  Game Development / Networking & Multiplayer / Re: Suggestion: the "initialize()" task in AppListener not timeout on: 2007-05-13 20:59:40
Sorry, I had a typo in my original post, and I had just woken up, what I was thinking of was something like this

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  
public class Server implements AppListener, Serializable, ManagedObject {
   
   private static final long serialVersionUID = 1L;

   private static final MyWorld world;  // Object that is initialized in static block
 
   static {
.
.  // initialize here in static block
.
    }

   public void initialize(Properties properties) {

.
.
.
     
   }

   public ClientSessionListener loggedIn(ClientSession clientSession) {
.
.
.
   }  
   
}


Firing a thread off is bad manners, but if you can't get it to work any other way, maybe that would be ok for a temporary solution.  (Just make sure you put a nice TODO to mark it for removal in the future).

Of course, as more of the API becomes public, I'm sure there are much better ways to approach this.

2  Game Development / Networking & Multiplayer / Re: Can't I ship managed objects as a byte arr from server to client on: 2007-05-13 19:29:11
So it looks like your trying to deserialize a ManagedObject on the client? 

You have a few problems with this.  First, you have to distribute the server libraries which I don't think is a good idea.  Second, your trying to deserialize a ManagedObject that looks to contain a ManagedReference.  How would the client use a ManagedReference?  It doesn't have access to the datastore to get the data.  Thirdly, ManagedObjects need to exist within a transaction I belive, which is the cause of your exception.

My suggestion is to create a seperate serializable but not managed class that is the data you want to transport to your client.  That object would be a data member in your managed object.  This way you can still keep server only data in the ManagedObject part of the object, but then have a client-only representation that is serializable (as long as it doesn't have any ManagedReferences).
3  Game Development / Networking & Multiplayer / Re: Suggestion: the "initialize()" task in AppListener not timeout on: 2007-05-13 19:23:14
Could you possibly put in a hack, temporarily, that did it's heavy initialize a static block, and initialize() just looks it up?   I'm not sure if AppListener.initialize() get's rescheduled if it times out (since the first call would still timeout). 
4  Game Development / Networking & Multiplayer / Re: Model design strategies on: 2007-05-08 17:38:48
As in ManagedObjects indeed. Other data, like static background, bitmaps, etc ... I can live with it to put it into a separate file format on a separate machine. It's the content and limitations of the object store I'm wondering about. Is it residing completely in memory all the time ? Is it partially swapped-out ?

The current SDK is using Berkeley DB, so I'm pretty sure it is partially swapped-out.  As for the final multi-node stack, I'd have to guess that they will support storage of data greater than could be managed on any one JVM.  Maybe Jeff can comment on the expected data limits of the final system.

The replication would be limited to the "region" the client is using of course. Nonetheless, if the region is big, the client needs to get a complete copy at least once.

One thing you might consider doing is splitting your data objects into two groups.  Client shared data objects and server data objects.  This way you can send to the client only data you are sure it cares about and keep everything else in a seperate data object.  For example, if you have a virtual world you are simulating with hundreds of players walking around your player, there is no need to ever send him the inventories of the hundred other players.  In fact, when he requests his inventory, you may only need to send him a small subset of the data to him, while keeping more detailed data on the server.

Btw, do you know whether there's something planned like best practices, design patterns, etc ... for SGS ?

I've been curious about that myself.  If you browse the forums you will pick up suggestions and comments that could be the beginnings of such a thing.  I think part of "best practices" can be put together by the community, especially after they open source it. 

In the mean time, I think the best thing is to just dive in and start experimenting with SGS to see what works and what doesn't.
5  Game Development / Networking & Multiplayer / Re: Executing sgs.jar file returns java.lang.ClassNotFoundException on: 2007-05-08 03:25:43
What dependencies does your OCAuthenticator rely on?  Could it be it can't construct properly?  I've seen class not found errors simply because the class failed to construct.  Try making a test class that simply constructs the OCAuthenticator class.
6  Game Development / Networking & Multiplayer / Re: Model design strategies on: 2007-05-07 22:20:37
Just some of my thoughts . . .

I'm having a look to SGS to check if it is able to easily handle large amounts of server-side data. Related to this I'm wondering a number of things. If someone can help me out with them ...  Grin

When you say "large amounts of server-side data", are you meaning static content data or persistance data that changes (as in ManagedObjects)?


  • I would like to implement a kind of Observer pattern where clients subscribe to changes on the server-side model. To do this it would be very handy to be able to catch changes of managed objects - in order to notify the clients a particular object has been modified. Is there a usual design for this in SGS ? Presumably these notifications must be using the server/client messaging mechanism. Correct ?

Remember, SGS is client agnostic, so any type of notification system that SGS ever provided would need to be as well.  It might be easier to wrap your server data in proxy objects that are also ManagedObjects.  These proxies could then perform the notification for you when set methods were called, in whatever manner you see fit.

In my experience it's often bad to wholesale replicate data from the server to the client, often much of the state that the server knows about isn't required within the client. 

  • Looking for answers I saw a topic about initial model upload to the clients. As my model is way too big to send regularly completely to the clients, I also though about an initial load. Making it only slow at login time. But I would really like to avoid an additional server-side setup, configuration and code development to allow HTTP too. Breaking-up the data into 64K pieces is not difficult. Alas, the resulting number of network requests alone will impact performance. Any suggestion ? Wink

You don't have to have the client make tons of 64K chunk requests to the server.  Simply have the client send a single message to the server telling it what it wants to download, and then the server can send data back to the client in 64K chunks.  Just make your client be able to recieve the data in chunked form and piece it back together.  This seems pretty easy with reliable ordered delivery.
7  Game Development / Networking & Multiplayer / Re: Suggestion: psuedo-reliable (reliable-UDP) channel on: 2007-05-06 01:03:40
What Dormando says is good to point out. 

Basically TCP is well supported and very good at doing what it does.  A lot of people see UDP as an easy way to decrease latency, and from what I've seen they often start adding "features" as they try to make it behave closer and closer to how TCP works.  I've seen a few projects that tried to use "reliable" UDP and over time ended up being switch back to TCP.

Debating the merits of TCP vs UDP though throws up a warning flag to me.  It seems a case of premature optimization.  From what I understand, the underlying network protocol can be swapped within Darkstar.  So assuming we can swap this out at a future date, then deciding to switch to UPD from TCP isn't really necessary.  I think premature optimization is a really common problem among developers and energy is much better spent on good design.

Wait till it works before you optimize.

8  Game Development / Networking & Multiplayer / Re: SGS ate my exception stacktrace... :( on: 2007-05-06 00:22:32
May 5, 2007 12:37:36 PM com.sun.sgs.impl.kernel.schedule.MasterTaskConsumer run
WARNING: dropping a task that failed with a non-retryable exception: com.sun.sgs.service.TransactionRunner[owner:[ id="user" context=Aethyria ]]
com.sun.sgs.app.ObjectIOException: ManagedObject was not referenced through a ManagedReference:
   -object (class "Aethyria.AePlayerConnection", Player.USER@f4705fee2e30b39a)
             [remainder of class-fields snipped]
   at com.sun.sgs.impl.service.data.SerialUtil.check(SerialUtil.java:236)
   at com.sun.sgs.impl.service.data.SerialUtil.serialize(SerialUtil.java:89)

Not sure if the last lines of the stack trace will help you.  This may be occuring in a seperate thread and thus outside of your code.

What's happening is your object "Aethyria.AePlayerConnection" is being referenced in some object that is being serialized.  ManagedObjects can not be serialized within other objects, instead you have to use a ManagedReference. 

You should look for any case where you have a Serialized object that is referencing your AePlayerConnection.  I often do this by accident quite regularly.

Hope that helps.

p.s. on a side note, it would be nice if the class that was trying to be serialized was also displayed along with the name of the ManagedObject.
9  Game Development / Networking & Multiplayer / Re: The Darkstar Community is Born! on: 2007-05-04 05:41:57
That's great news!

I definately think it would be great to pick a time for us to get together.  My vote is for you to just pick a time and we'll go from there.

For these "mini-talks" that they are asking us to participate in, what kind of stuff would be appropriate?  I've never been to J1 before so I'm not familiar with them.  I've spent a decent amount of time fooling around in Darkstar and wouldn't mind talking about some of my experiences, but I'm not sure what in particular.  I can't really talk about the project I'm working on because of mutliple NDA's but I might be able to put something together from my experiences.

I'm definately up for anything that gets Darkstar some recognition and more community involvement.
10  Game Development / Networking & Multiplayer / Re: Initial Data Transfer on: 2007-05-03 08:42:24
Endolf's right,

For static content think about using a webserver to serve up content.  They are designed for this and are very fast at delivering static data quickly and efficiently. 

If you are talking about synchronizing user and world state data between the client and server, Darkstar provides the tools to aid you in this but that is it. 

You'll find that the way games replicate data between client and server can be very game specific.  You have some games that may replicate an exact copy of server data on the client.  Others may treat the client more as a dumb terminal and only send it commands to update the visual state, keeping all of the real details on the server.  Then other games may be the exact oposite.  The server acts as a match maker but once the clients know about each other, they leave the server out of the equation and talk directly.

With Darkstar you can build any one of these forms of games but you have to put all the pieces together yourself.  It's more concerned with the more complex piece of the game puzzle, core server technology.  Think of it as the Application server of the game world, and you get to write the browser.
11  Game Development / Networking & Multiplayer / Logging in a Darkstar Environment on: 2007-04-26 18:05:20
Within a simple SDK environment, logging isn't much of an issue.  Just using something like log4j will work fine, for the most part.  It's not too hard to figure out what is going on by going through your server logs.

I do have a few concerns though that mostly deal with a clustered environment, but may be issues even in the SDK environment.

1) Let's say we have a task that is logging what it is doing.  Halfway done, and by no fault of it's own, it get's canceled and rescheduled.  I can see at the very least how the logs can get a bit confusing,  We might see something like this

-- Do step 1 of the task
-- Do step 2 of the task (btw, this must only occur once)
-- Task is canceled
-- Task is reschedules
-- Do step 1 of the task
-- Do step 2 of the task (btw, this must only occur once)

So while our task was in a transaction and it's step 2 only performed once, it's log message about it performing occured more than once.  This isn't that big of a deal, but I was wondering if their will be any optional way to perform "transactional" logging?  Possibly have some messages not actually log until the task commits?

2) This is the more important question.  In a clustered environment managed by a 3rd party, Has any thoughts been given about where the logs are going?  How are they might be made available to the developer?  And any thoughts about consolidating logs across the nodes in a cluster?

I hope all that makes sense, thanks.
12  Game Development / Networking & Multiplayer / Re: SessionId vs ClientSessionId on: 2007-04-23 20:17:14
Another odity about them if they are similar objects is that their construction from bytes and their serialization into bytes are slightly different. 
13  Game Development / Networking & Multiplayer / SessionId vs ClientSessionId on: 2007-04-23 16:54:26
I'm trying to understand the difference between a SessionId and a ClientSessionId. 

What brought this questiion about was I was working with Channels.  My clients are subscribed to channels, and I wanted them to send messages to various other clients using the channel send method that takes a set of SessionId's.  I wanted my server to be in charge of telling each client the list of SessionId's that it should send to. 

It seems that on the server all I know about are ClientSessionId's.  Am I doing something wrong?  How are SessionId and ClientSessionId related?

On a similar note, how efficient are channels?  Can I expect to have a large number of subscribers on channels scale well?  Let's say we have 1000 clients listening to a channel, and one client broadcast to a very small set (like 10 clients) on that channel.  Is that an expected use of channels? 
14  Game Development / Networking & Multiplayer / Re: Suggestion: n00b sub-board on: 2007-04-17 05:26:16
I think everyone right now is a n00b, and I've enjoyed reading your questions.

I take it you just started getting into Darkstar?
15  Game Development / Networking & Multiplayer / Re: Synchronizing Time across a Darkstar Cluster on: 2007-04-06 20:01:03
Thanks Jeff,

Yeah, I really only need 1/30th of a second accuracy most of the time anyway.
16  Game Development / Networking & Multiplayer / Synchronizing Time across a Darkstar Cluster on: 2007-04-06 18:45:36
I've been working on a piece of my project that needs to synchronize time between clients and servers.  My original idea was to make everything use "server time", and have each client calculate a server time offset at startup by trading packets with the server.

The clients can now recieve a player move event which contains a starting point, direction, and velocity, and using the attached server time adjust the remote players position to reflect it more accurately (since network lag means some time has passed since the event was created).

So I've got this mostly working, and it's calling System.nanoTime() .  But I realized in a clustered environment this can be wildly different across nodes of the Cluster. 

Are their any suggestions about how I might get what I'm after that will work properly across the cluster?

Should I just use System.currentTimeMillis() since it's time since January 1, 1970 UTC instead of some arbitrary point that the nanoTime method uses?  I could assume all nodes in the cluster were running NTP and had their time synced.

Just curious about your thoughts or if I'm going about this all wrong?
17  Game Development / Networking & Multiplayer / Re: Long execution/background tasks on: 2007-04-04 01:20:09
Thanks a lot James, that makes sense.
18  Game Development / Networking & Multiplayer / Re: Long execution/background tasks on: 2007-04-04 00:49:08
So after fixing my code, it turns out I'm not seeing the weird slowdown.  Which is good.  Now that my profiling code is properly profiling, I seem to get about 300 Managed tasks per second or 850 non managed tasks per second .  My code looks like this

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
public class Server implements AppListener, Serializable, ManagedObject {

   private static final long serialVersionUID = 1L;

                     private static final int INITIAL_TASK_COUNT = 1;    

   public void initialize(Properties properties) {
     
      for (int t=0;t<INITIAL_TASK_COUNT;t++) {
         MainTestTask task = new MainTestTask();
         AppContext.getTaskManager().scheduleTask(task);
      }
   }
   
   public ClientSessionListener loggedIn(ClientSession clientSession) {
      return null;
   }
}


The MainTestTask is the Task code mentioned in my prior post.
19  Game Development / Networking & Multiplayer / Re: Long execution/background tasks on: 2007-04-04 00:19:32
Thanks for the info, what you described is pretty much what was expecting was going on under the hood. 

So I started doing some investigating, since I figured this is an issue on my end as no one else is seeing this.  I think what is happening is that my code for tracking the tasks per second was buggy.  I'll dig into this more, and if I turn up something else I'll let you know.

I do have a question about all of the log.* files in the data directory.  Why does this continue to grow in size as I run my application?  I'm not storing any managed objects (except for Tasks).  Running for a few minutes gives me a hundred files each 10 megs.
20  Game Development / Networking & Multiplayer / Re: Long execution/background tasks on: 2007-04-03 22:13:18
The test of just spawning the threads was to just get a baseline.  I totally understand that spawning a Task won't compare against a Thread, and I'm not expecting that.  I just wanted to get an idea of what I would expect. 

As it stands right now it seems that I'm doing something wrong, since at first I get over 1600 tasks per second and then as the server runs it runs fewer and fewer tasks.  Of course this never measures up to  Seth's mention of 15K tasks per second. 
21  Game Development / Networking & Multiplayer / Re: Long execution/background tasks on: 2007-04-03 21:59:05
As for my tests, I wasn't starting threads inside the app server.  I basically had two applictions as follows:

App 1) A simple java application that tried to create a thread and execute it as fast as possible.  It tracked how many threads it could create, execute, and complete over a given period of time.
App 2) A SGS Server that spawned simple tasks that did nothing but track how many were spawned, it looked like this:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
public class MainTestTask implements Task, Serializable{

   private static final long serialVersionUID = 1L;
   
                      // A very simple task with pretty much no contention
  public void run() {
                                           // Stack method that tracks how many times this task ran using an AtomicInteger
     TaskTracker.trackTask();
     
                                           // Start a new task
     AppContext.getTaskManager().scheduleTask(new MainTestTask());      
   }

}


When I let App 2 run, it starts out executing about 1600 tasks every second, but after about 30 seconds it drops down to about 40-50 tasks per second and the longer it runs, the slower it gets.  I have noticed in my data directory it generates lots and lots of 10 meg log files (I let it run for a few minutes and I have over 100 of them). 

Any clue as to what I'm doing wrong here?
22  Game Development / Networking & Multiplayer / Re: Long execution/background tasks on: 2007-04-03 18:05:32
How much overhead is their in creating a task?  I did a simple test, I created a Runnable that displayed the current time.  I tested executing it with thousands of tasks vs thousands of threads and it seemed threads were about 3x faster (that time includes creation and execution).  Since a Task consist of a transaction I can understand this. 

How many "short lived" tasks would you expect an average machine to be able to handle?  (assuming these tasks are discreet and don't block on each other).  I'm just trying to understand what kind of performance characteristics I should expect?  The code I'm working with is event based and I'm trying to decide if I should create a task for every event or try to bundle a few events together and hand them to a single task to execute. 
23  Game Development / Networking & Multiplayer / Re: Question about genericity in the class ManagedReference on: 2007-04-02 05:53:26
Yeah, I understand what your saying.  Although in my code I'd prefer to have references that are specific to a specific class instead of making everything an Object.  I've used this GenericManagedReference<X> everywhere in my code and it has helped catch a lot of would be runtime errors.

I think

1  
2  
3  
4  
5  
6  
7  
8  
9  
GenericManagedReference<Foo> fooRef = new GenericManagedReference<Foo>(new Foo());

.
.  Do some stuff here
.

Foo foo = fooRef.get();

// Note that Bar bar = fooRef.get() will not even compile.


is a lot safer and easier to read than

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
ManagedObject unknownReference = AppContext.getDataManager().createReference(new Foo());

.
.  Do some stuff here
.

// Providing the class twice seems odd?  
// Seems that
//   <X> X ManagedReference.get(Class<X> value)
// Could just be
//   <X> X ManagedReference.get();
Foo foo = unknownReference.get(Foo.class);


especially considering that I've been known to do this a bit . . .

1  
2  
3  
4  
5  
6  
7  
8  
ManagedObject unknownReference = AppContext.getDataManager().createReference(new Foo());

.
.  Do some stuff here
.

// Since I don't know what this is a reference to, a quick typo will give me a runtime error
Bar bar = unknownReference.get(Bar.class);

24  Game Development / Networking & Multiplayer / Re: Question about genericity in the class ManagedReference on: 2007-04-02 00:16:25
I was just about to ask a similar question . . .

I ended up writing a wrapper around ManagedReference that could track the type it was referencing.  I didn't like the fact that because of cut and paste errors I might try to get the wrong type out of a managed reference.  The reference itself really didn't seem to have a clue as to what it was refering to.  Using this new class, I can specify it's type and even bind it to the datamanager within the constructor.

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  
import java.io.Serializable;
import java.math.BigInteger;

import com.sun.sgs.app.AppContext;
import com.sun.sgs.app.ManagedObject;
import com.sun.sgs.app.ManagedReference;


public class GenericManagedReference<X extends ManagedObject> implements ManagedReference, Serializable {

   private final static long serialVersionUID = 1L;

   private ManagedReference ref;
   
   private Class<X> clazz;
   
   public GenericManagedReference(final X obj) {
      ref = AppContext.getDataManager().createReference(obj);
      clazz = (Class<X>)obj.getClass();
   }

   public <T> T get(Class<T> arg0) {
      return ref.get(arg0);
   }

   public <T> T getForUpdate(Class<T> arg0) {
      return ref.getForUpdate(arg0);
   }
   
   public X get() {
      return ref.get(clazz);
   }
   
   public X getForUpdate() {
      return ref.getForUpdate(clazz);
   }  

   public BigInteger getId() {
      return ref.getId();
   }
}
25  Game Development / Networking & Multiplayer / Re: Managing ManagedObjects on: 2007-03-20 17:14:43
One thing I might suggest is a shutdown() method on the AppListener that is called when the server is shutdown properly and or if the app is shutdown properly if there is such as thing.. This would allow game developers to do some things for themselves if their application allows it

Another possible change would be to add a boolean to initialize on the AppListener. It would be true if the object was being loaded for the first time and false if the object had been loaded from the store. Obviously if this was the case then initialize would need to be called everytime it was loaded. Anyway, this could allow the upgraded version per-sey to go through its objects and do something useful..

I was thinking about this as well.  I think there are some events we need to be aware of, such as cluster startup/shutdown.  For a real world example, in another project our game server broadcasts it's status to a webserver.  It tells the server when it goes up, when it comes down, and while it's running it periodically broadcast it's state information.  This data is displayed to users. 

Another use I've seen the startup event be used for is reporting user entry point addresses.  Instead of having a static address for clients to connect to, the server generates a connection string that may contain more than one entry point.  This is given to an external web server and the client takes that value and uses it to connect to the game server.  I'm not sure exactly how Darkstar handles client entry points but in a large scale environment, it seems having more than one connection point would be a good idea.  Sorry, I think this is getting a bit off topic, just an idea.

Events I could see as being useful:

- gameAppStartup(boolean gracefulShutdown, Set<ClientEntryPoint> clientEntryPoints); // Called on startup and the flag tells us if we shutdown gracefully and where the clients should connect
- gameAppShutdown();  // Called on graceful shutdown

26  Game Development / Networking & Multiplayer / Re: Managing ManagedObjects on: 2007-03-20 07:49:47
I'd like to turn this discussion away from the "how we do it" space its drifting into and back into the "what it does" it started at because thats a whole lot more useful to me.

So going back to "what it does", I can think of a variety of things I'd like to see in one form or another (or at least a reason why I don't need them :-) )

Re-factoring - Often during a project, we might re-factor our code simply causing our managed objects to change in a way that doesn't really affect the underlying data of the object. 

Transforming - Adding/Deleting data, changes to data types, and other such transformations are quite common during the development life-cycle.

Querying - In a way I see this as a related issue.  In dealing with Managed objects it would be nice to have other ways of getting them besides a named lookup.  Maybe a way to iterate through a sequence by class or some other arbitrary properties. 

While I really like the goal of not burdening the developer with pre-processing code or maintaining explicit OR schema having the option for more control over managed objects is going to be more and more important as people start digging into Darkstar.  As for myself, I'm going to start digging more into Darkstar and see what issues I run into as I approach it for the first time.  It should be fun! 
27  Game Development / Networking & Multiplayer / Re: Managing ManagedObjects on: 2007-03-19 23:46:41
Well I think it breaks Darkstar's transactional safety if you aren't using ManagedObjects for your persitance.  ManagedObject are definately not short lived objects, since they exists for the lifetime of your application.   

I wonder if it would be possible to write some sort of helper class that would serialize/deserialize a standard object for you, but would also detect version changes and aid in translating between old and new versions.   While I really do love the simplicity of not having to define the serialization code, I think in a true production environment something like this would be needed anyway, with Java serialization being a bit heavy most of the time anyway.
28  Game Development / Networking & Multiplayer / Re: Managing ManagedObjects on: 2007-03-19 22:13:30
I definately don't like the idea of dropping anything in which the servialVersionID doesn't match.  I think this is much worse than an exception, it like deleting possibly needed data without so much as a warning. 

What is needed is a safe, simple and easy way to translate from older versions to newer versions.  Maybe a way to catch this exception and handle it?

This type of translation could handle converting old object types into new object types and deleting old types that are no longer needed.

In previous applications I've written where they had to maintain backwards compatibility with prior serialized data (this was in C++), I would write translations between versions.  I might have a translator from version 0 to 1, from 1 to 2, and from 2 to 3.  So If I loaded version 2 I could translate into version 3.  Even if I loaded a version 0, I could go through the chain of translators until I reached the needed version.  The problem is these translations are not automatic.  They often require a decision from the developer on how to generate default values or convert types to new types.

That being said, I don't have any idea how to implement such a thing.
29  Game Development / Networking & Multiplayer / Re: User Authentication on: 2007-03-19 03:58:06
I litterally started looking at Darkstar yesterday, what is the JAAS Callback methodology?
30  Game Development / Networking & Multiplayer / Re: User Authentication on: 2007-03-19 03:31:28
Well even if they don't provide a secure transport for passwords, I don't see that it would be much of an issue of writing my own.  One simple way of doing it would be to simply allow the client to connect to the server under all circumstances, then after the connection is established build your own authentication protocol after the fact.

Pages: [1] 2
 

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

The first screenshot will be displayed as a thumbnail.

pw (21 views)
2014-07-24 01:59:36

Riven (19 views)
2014-07-23 21:16:32

Riven (16 views)
2014-07-23 21:07:15

Riven (19 views)
2014-07-23 20:56:16

ctomni231 (47 views)
2014-07-18 06:55:21

Zero Volt (43 views)
2014-07-17 23:47:54

danieldean (34 views)
2014-07-17 23:41:23

MustardPeter (38 views)
2014-07-16 23:30:00

Cero (53 views)
2014-07-16 00:42:17

Riven (52 views)
2014-07-14 18:02:53
HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54

HotSpot Options
by Roquen
2014-05-06 15:03:10

Escape Analysis
by Roquen
2014-04-29 22:16:43

Experimental Toys
by Roquen
2014-04-28 13:24:22
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!