Hi !
Featured games (84)
games approved by the League of Dukes
Games in Showcase (601)
Games in Android Showcase (171)
games submitted by our members
Games in WIP (649)
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  
  Giving orders from a core loop  (Read 985 times)
0 Members and 1 Guest are viewing this topic.
Offline abirmingham

Junior Newbie

« Posted 2009-03-30 05:29:32 »

Hey All -

I'm creating a core server loop for my MUD that will command various modules of the game (each presumably running on their own thread) to refresh themselves. For example, the core loop would contact an actionsStack module and tell it to process a certain number of actions, contact a mobList module and tell it to command each mob to tick (retrieve actions, check if spell durations are up, lose health if bleeding, etc.), perhaps check on a newPlayerConnections module, maybe sleep, and then start all over.

My intention behind encapsulating all of the above functionality into various modules is that the core loop need not hang on any particular resource-intensive process, thereby delaying other processes.

A) Is this a reasonable solution to the problem?

B) If so, what is the best way to code a 'refresh' order from the core thread to secondary module threads? My first thought is to create a volatile boolean named refreshed, and have it set to false by the core thread. And the secondary thread would just loop while(!refreshed) {    doStuff;    }

Offline Eli Delventhal

JGO Kernel

Medals: 42
Projects: 11
Exp: 10 years

Game Engineer

« Reply #1 - Posted 2009-03-30 17:15:12 »

I'm not an expert on Threads, but in my opinion the less you have the better (maybe that's why I'm not an expert on them). While it is absolutely a good idea to try to keep the core loop from hanging, I don't necessarily see the point in it because if one process is taking a long time won't you have a lot of bad synchronization issues if you don't wait for it? I also would not at all recommend just a while loop. That will jack up processor use to 100% whether it is needed or not. I would just use Thread.yield() on all Threads that should be waiting. Actually I guess if you just put Thread.yield() inside your while loop it should probably fix your problem.

See my work:
OTC Software
Offline abirmingham

Junior Newbie

« Reply #2 - Posted 2009-03-31 17:39:17 »

I think you're right, actually. Often times I find myself operating under the notion that giving two different modules two different call stacks, that they receive more attention than they would in a single call stack. In other words, that the two stacks are truly operating simultaneous to one another. The reality is, I think, that I'm just introducing synchronicity issues.

Okay, here's what I have for a core loop at the moment. If anyone can think of other generic MUD server functions (outside of specific architectural solutions) please let me know. Any and all feedback very much welcome.

Core Loop*
Check for incoming network connections
Monitor existing connections (Manage disconnect... hrmm should input be sent to players here? Or at end of loop?)
Player refresh (get input, create actions, update status)
MonsterBehavior (create actions, update status)
ProcessActions (Game logic to create event objects of some sort)
Publish narratives(send input to players)

*Each line represents a class or group of classes
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Eli Delventhal

JGO Kernel

Medals: 42
Projects: 11
Exp: 10 years

Game Engineer

« Reply #3 - Posted 2009-04-01 07:17:24 »

That seems right. The one MUD I messed around with was written in PHP and MySQL, so basically all I needed to do was have each page pull from the current MySQL data, and adjust the data when someone did something. This could be sort of weird, especially with people who had varying connection speeds, but it worked on a simplistic level. What you have should work a lot nicer due to every request and action going through one place.

See my work:
OTC Software
Pages: [1]
  ignore  |  Print  
You cannot reply to this message, because it is very, very old.

Riven (23 views)
2015-07-27 16:38:00

Riven (13 views)
2015-07-27 15:35:20

Riven (18 views)
2015-07-27 12:26:13

Riven (8 views)
2015-07-27 12:23:39

BurntPizza (24 views)
2015-07-25 00:14:37

BurntPizza (36 views)
2015-07-24 22:06:39

BurntPizza (20 views)
2015-07-24 06:06:53

NoxInc (23 views)
2015-07-22 22:16:53

NoxInc (14 views)
2015-07-22 22:13:39

Jesse (36 views)
2015-07-22 03:10:36
List of Learning Resources
by gouessej
2015-07-09 11:29:36

How Do I Expand My Game?
by bashfrog
2015-06-14 11:34:43

List of Learning Resources
by PocketCrafter7
2015-05-31 05:37:30

Intersection Methods
by Roquen
2015-05-29 08:19:33

List of Learning Resources
by SilverTiger
2015-05-05 10:20:32

How to: JGO Wiki
by Mac70
2015-02-17 20:56:16

2D Dynamic Lighting
by ThePixelPony
2015-01-01 20:25:42

How do I start Java Game Development?
by gouessej
2014-12-27 19:41:21 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‑
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!