Jump to content

Game Server


caligula
 Share

Recommended Posts

How about a game server?

Not talking about a server hosting the game itself but just the active games. At the moment it makes fun testing the game but it would make much more fun testing it with others. Still it is tough finding other games. The easiest way would be a website showing active games (initially it would be enough to get the IP addresses) that you can join.

Afterwards it would be great to make it part of the game itself to join any active game.

Some suggestions about the information for games:

-) Number of players (total to see how many can attend, active to see available places)

-) Map which is used (and if this map is available on the client system)

-) Time when the game gets started (e.g. in seconds)

-) Time the game is running already (if it is possible to join during an active game as well)

-) Comment (to describe who should attend or if it is just a test game or ...)

Of course I can do it immediately as plain web service but it would be much better if there is a kind of minimum interface at the client to send this information to the server and vice versa. It would be possible to create it as php page and if you like it, it could be moved to your server as a web page as well.

The main idea at the moment is speeding up getting testers of the maps and it would be very useful to have a larger test base.

Regards,

Caligula

Link to comment
Share on other sites

Yeah, a lobby server would definitely be useful. I haven't thought about technical design much, but I'd guess it may be best for the server to provide a JSON-over-HTTP API - that way it can be used easily by the game engine (we just need to add libcurl and give the GUI scripts access to it), and could also be used by web-based interfaces or other tools if people find those more convenient. There's lots of other things we could do with a central server too - update notifications, firewall checking, NAT punchthrough, collecting gameplay statistics, etc.

if this map is available on the client system
Ideally we'll have automatic downloading of new maps, and they'll be fairly small files, so that shouldn't be a problem. (Need to worry a lot about security before we implement that, though.)
Time when the game gets started (e.g. in seconds)
Is this information available? I thought people usually just waited until there were enough players and/or they got fed up, and then started the game immediately - they don't explicitly plan to start the game in n seconds, so there's no timer to show to other players.
Time the game is running already (if it is possible to join during an active game as well)
The engine design makes that technically feasible, and it would be a good thing to have, though it'll probably take a lot of effort to make it work reliably.
The main idea at the moment is speeding up getting testers of the maps and it would be very useful to have a larger test base.
I think testing isn't the highest priority now - we're already aware of a lot of errors and missing features and have plenty to work on, but it'll become more important in the hopefully-not-too-distant future when we've fixed the obvious problems so testers can find new subtler problems. Would be good to have a system set up by that point so that people can test as easily as possible.
Link to comment
Share on other sites

It'd be just for lobby. The way i see, it could show list of available games (for players to be able connect in order to automatically join a game in a peer to peer networking manner), ping speed, friend list, and chat lobby/game rooms.

A good example of this would be MSN Zone where it used to acted like a lobby server for AOE II.

Edit: I will be using this, as Ykkrosh has recommended, with JSON-over-HTTP.

Edited by rjs23
Link to comment
Share on other sites

I've released a somewhat operational lobby server. It is incomplete but it should be able to help people find games by their ip addresses.

It does not connect you to the game automatically yet since I do not know how to make the lobby server communicate to 0AD game yet. I'm thinking about communicating through memory by using clipboard?

This server's url is http://0adlobby.x10.bz/0adLobby.html and it is being operated on a free server so it will be running slow and might go down sometimes if people abuse it. I am trying to keep this thing free and allow access to everyone so the users don't have to sign in without a charge.

Again, I'd like to point out that some feature are still incomplete therefore they can be glitchy.

Feel free to test around.

The following features that I plan to add later when I have more free time:

User sign in/out (so that username are displayed instead of their ip addresses)

friend list

@dementor: The server doesnt really have to be new to be good. We can test it later if you can get it up and running. Are you saying that you having trouble configuring the server?

@tatewatkins: I am not very good in C programming so I'd have hard time reading SpringLobby's open source code.

Edited by rjs23
Link to comment
Share on other sites

It does not connect you to the game automatically yet since I do not know how to make the lobby server communicate to 0AD game yet.
Hmm, I guess there's a few ways we could support external lobby clients, but I'm not sure what would be best.

One option is to require that the user already has the game open and running. The game could run a local HTTP server on some predetermined port, then the lobby client web page could do <iframe src="http://localhost:12345/0ad-rpc.html"></iframe> to open a connection to the game and use postMessage() to do bidirectional communication. That could be interesting for more than just lobby clients - it could provide an API for writing out-of-process AI players, for collecting performance stats, for running automated tests, etc.

Another option is for the game to register a protocol handler, so the lobby client can navigate to a URL like "zeroad://connect?ip=12.34.56.78" which will launch the game even if it's not already running. Need to be extremely careful about security, though - any random malicious web site could trigger it at any time, and safely parsing the command-line options doesn't sound easy (it seems a common security vulnerability). (Is it possible to do similar things with MIME types rather than protocol schemes? I guess it's somewhat platform-dependent.)

Link to comment
Share on other sites

@dementor:

Which file are you refering to? We do not know the status of your pc. What operating system is it? are the software and features installed and ready? What files does it lack?

For now, I'll use that web hosting. It's not a big deal to use your server right now.

@Ykkrosh: I'm lending toward on your opinion about the "predetermined port" because I believe that 0A.D can do more features with the outside communications than just the through the protocol handle which may be an hassle to deal with. It could also allow voice chat (would not work good in this case since it's a free server which can make it unreliable and slow until the lobby server get a real server) which some user would like to have. Unless a user has a plugin that allows javascript to start 0A.D automatically, the user of will still have to run the program manually, of course.

Maybe 0A.D could use a browser engine like webkit, or gecko to communicate directly to the server while inside the game as a part browser (without depending on those popular browsers?)

Anyhow,

I've made some more progress on the Lobby Server. It is much more stable and is more completed.

It also now allow hosts to stop hosting when they're done hosting.

They can now remain hosting the game without needing to run browser in background. When the server loses connection with you while you're still hosting, the server will eventually see you being offline and mark you as a inactive hosting (but your game would be still being hosted) and your hosting session will become restored as an active host once you visit the lobby server later. The benefit of this to free up CPU and RAM for 0A.D to run more smoothly on old machines while your game is being hosted.

Edited by rjs23
Link to comment
Share on other sites

Maybe 0A.D could use a browser engine like webkit, or gecko to communicate directly to the server while inside the game as a part browser (without depending on those popular browsers?)
I've thought about embedding WebKit, but I think it'll be quite a pain to do it portably and efficiently. It'd probably be easier for an in-game lobby client to just use our current custom GUI system for rendering (and we should add an HTTP API so GUI scripts can communicate with the server).
Link to comment
Share on other sites

I've thought about embedding WebKit, but I think it'll be quite a pain to do it portably and efficiently. It'd probably be easier for an in-game lobby client to just use our current custom GUI system for rendering (and we should add an HTTP API so GUI scripts can communicate with the server).

I can imagine it being troublesome to be planting it into the the 0A.D. You're right, it's probably not worth the files space and security flaws they might pose. I don't know much about all the engines and C programming and all that, but I could understand all the works involve in it now. I'll start programming the client side browsers to try to interact with the 0A.D via "bidirectional communication" once I know what it needs to communicate with 0A.D.

*goes look for a document around here to find more about how to communicate to 0A.D*

Link to comment
Share on other sites

  • 1 month later...

Is there any news from this work?

I'm interested in help with that. I could make an REST application (HTTP API calls) in order to bring the capability of have a in-game lobby.

So, i think we can define some features for this:

- list active games

- create games

- update game settings (map, players, etc)

- update game status (in lobby, in progress, etc)

- more?

The different calls could return XML or JSON data, so it would be easy to build the in-game lobby interface. What do you think?

Edited by sergiovier
Link to comment
Share on other sites

I love this idea, and I love the fact that you've already got a lobby set up! Two suggestions for your lobby:

- Ability to choose a nickname (eventually log in using forum username, but that requires some login knowledge of our MySQL database that you'll have to speak with the web team to access)

- Time stamp for chat.

And some eventual suggestions for when the lobby can communicate with the game:

Ranking based on:

- Highest statistics (most units killed in one game, most resources gathered etc.)

- Win/Loss ratio (requires a certain number of games to be ranked - a 1:0 ratio shouldn't put you in first place if there are people with 73:32, for example)

- Fastest campaign completion time?

Sort games based on:

- # of players

- Preferred playing style (Deathmatch, Conquer etc.)

- With or without territories

- Preferred map

- Factions (pick one you like to play against or one that complements you for ally situations)

- Availability of teams (or just FFA)

Match-making based on:

- Amount of time played

- Difficulty of campaign completion

- Win/Loss Ratio

Since initially the multiplayer community will be small, we won't offer many options for match-making. Pushing the button will just put the player in a waiting room until equally-ranked players are found. Hosting a match-making game will only allow you to limit the number of players that may join. Once players are found, the game will pick the map/game/settings based on whatever is most popular online at that point. Somewhat like in Halo, players in the room will be able to vote up/down the option displayed until a consensus is reached. :ok:

Link to comment
Share on other sites

According to my web hosting server. I've been suspended. 10Xhosting do not like the chat feature. I will have to find another server for this.

@sergiovier if your REST application can launch 0ad game automatically then that would be great because popular browsers does not permit it. Users will still need to launch the game manually then use copy/paste ip address to join games. Let me know if you plan to do this.

@Kimball I am slowly working out bugs. I will do the essential ones such as sorting list and nickname (if I'm right, retrieving users' name on other domain will not happen unless 0ADLobbyserver is on same domain as this website. However, I can be wrong about this. )

You could email me your team's email address so we can talk.

Link to comment
Share on other sites

Sorry for the late response, I'm too busy but i would like to show some ideas to interfacing REST services.

I've some initial definitions for web services that we can discuss: https://docs.google.com/document/d/18x7ph2r...uthkey=CLO7xr8J

The idea is build an php application to expose these services. I'm a web developer with experience in symfony framework (www.symfony-project.org), so i would like to build these web services using this technology :ok:

@sergiovier if your REST application can launch 0ad game automatically then that would be great because popular browsers does not permit it. Users will still need to launch the game manually then use copy/paste ip address to join games. Let me know if you plan to do this.

I think 0ad team will implement an internal lobby, so this will be the best (only) place where you can launch a 0ad multiplayer game. But we can always have a web interface to show the lobby activity.

Link to comment
Share on other sites

@Sergiovier: Interesting idea, so you're going to try to build these web services for your php build or you want me to follow those outlines and apply them to my server so your php application can use them?

I think 0ad team will implement an internal lobby, so this will be the best (only) place where you can launch a 0ad multiplayer game. But we can always have a web interface to show the lobby activity.

They will implement it, but for now, my lobby server provides temporary mean of finding games (once it gets back up and running) for users while developers create their lobby in 0AD.

Edit: I took this opportunity to learn more about gaming lobby since I have never had this kind of experience

Edited by rjs23
Link to comment
Share on other sites

A new server is found with the new update to game lobby server.

Edit: Link removed (my account got suspended due to exceeding CPU quota on their server.)

Changelog:

New server for web hosting.

Contain several bug fixes.

Improved performance

Each user are named 0AD_## instead of their ip address. (I will add renaming feature to rename their nickname)

Chat/talk fixes

Speed up game list refresh rate

New feature: Now show which host is offline (host that is not connected to lobby server but still hosting);

Some other new features such as port numbering and nickname from the documentation provded by sergiovier

EDIT: forgot a new feature, you can sort game list by game name, latency, and host.

@sergiovier: I've added some of those specifications to the server I'm building. Let me know how it goes and we'll work together from there

I will continue work on adding more features and add security layers to it. Feel free to post your wishes/suggestions.

By the way, I am aware of my failing English noted here. I apology but bear with me lol.

Issues with this server:

This server is slow. The ping can spike.

Can easily be messed up.

Edited by rjs23
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...