From: "Alex G." Date: 2010-10-31T06:02:00+09:00 Subject: How to write this in ruby /** So i need to make this java application into a ruby application, but im very new to ruby (first day). I played around a bit and made a couple of server apps.. hello server world.. and a simple chat, but i need something where the server takes information from one client, and passes it to a second client, after making a few changes. Altho not shown in the code this application is a server for a game of checkers, it takes the move that player 1 makes, inverts it and sends it to player 2. i been reading around on how to do this, if someone can help or point to where i should focus my research, i would be greatful. */ import java.net.*; import java.io.*; public class GameServer{ private Player players[]; private ServerSocket server; private int currentPlayer; public GameServer() { players = new Player[ 2 ]; currentPlayer = 0; // set up ServerSocket try { server = new ServerSocket( 5000, 2 ); } catch( IOException e ) { e.printStackTrace(); System.exit( 1 ); } } public synchronized void changeTurn(int player, int x, int a, int b, int c, int d){ while ( player != currentPlayer ) { try { wait(); } catch( InterruptedException e ) { e.printStackTrace(); } System.out.println("waiting..."); } currentPlayer = ( currentPlayer + 1 ) % 2; players[ currentPlayer ].otherPlayerMoved(x,a,b,c,d); if(x==0){ currentPlayer = ( currentPlayer + 1 ) % 2; } notify(); // tell waiting player to continue } // wait for two connections so game can be played public void execute() { for ( int i = 0; i < players.length; i++ ) { try { players[ i ] = new Player( server.accept(), this, i ); players[ i ].start(); } catch( IOException e ) { e.printStackTrace(); System.exit( 1 ); } } // Player X is suspended until Player O connects. // Resume player X now. synchronized ( players[ 0 ] ) { players[ 0 ].threadSuspended = false; players[ 0 ].notify(); } } public boolean gameOver() { // Place code here to test for a winner of the game return false; } public static void main( String args[] ) { GameServer game = new GameServer(); game.execute(); } } // Player class to manage each Player as a thread class Player extends Thread { private Socket connection; private DataInputStream input; private DataOutputStream output; private GameServer control; private int playerIndex; private char mark; protected boolean threadSuspended = true; public Player( Socket s, GameServer t, int num ) { mark = ( num == 0 ? 'X' : 'Y' ); connection = s; try { input = new DataInputStream( connection.getInputStream() ); output = new DataOutputStream( connection.getOutputStream() ); } catch( IOException e ) { e.printStackTrace(); System.exit( 1 ); } control = t; playerIndex = num; } public void otherPlayerMoved(int x, int a, int b, int c, int d) { try { output.writeUTF( "Opponent moved" ); output.writeInt(x); output.writeInt(a); output.writeInt(b); output.writeInt(c); output.writeInt(d); } catch ( IOException e ) { e.printStackTrace(); } } public void run() { boolean done = false; try { output.writeChar( mark ); output.writeUTF( "Player " + ( playerIndex == 0 ? "X connected\n" : "Y connected" ) ); // wait for another player to arrive if ( mark == 'X') { output.writeUTF( "Waiting for another player" ); try { synchronized( this ) { while ( threadSuspended ) wait(); } } catch ( InterruptedException e ) { e.printStackTrace(); } output.writeUTF( "Other player connected. Your move." ); } // Play game while ( !done ) { int x = input.readInt(); int a = input.readInt(); int b = input.readInt(); int c = input.readInt(); int d = input.readInt(); control.changeTurn(playerIndex,x,a,b,c,d); if ( control.gameOver() ){ done = true; } } connection.close(); } catch( IOException e ) { e.printStackTrace(); System.exit( 1 ); } } } -- Posted via http://www.ruby-forum.com/.