
package arithmaticsystem;

import java.net.ServerSocket;

import java.net.Socket;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;


public class Server
 {

   
 public static double doOp ( Operation o )
 
   {
      
  double res = 0.0;
        if ( o.opName.equals("add"))
  
      {
            
res = o.fnum + o.snum;
       
 }


   
     if ( o.opName.equals("sub"))
 
   
    {
           
 res = o.fnum - o.snum;
     
   }

   
     if ( o.opName.equals("mul"))
       
 {
        
    res = o.fnum * o.snum;
 
       }

     
   if ( o.opName.equals("div"))

        {
          
  res = o.fnum / o.snum;
   
     }

     
   if ( o.opName.equals("mod"))
  
      {
          
  res = o.fnum % o.snum;
 
       }

     
   return res;
   
 }

   
 public static void main(String[] args)
 {
        
       
 ServerSocket server;
        int port = 1444;
       
 try
  {
            server = new ServerSocket(port);  
      
            while (true)
   
         {
             
   try
  {
    Socket socket = server.accept();


                    new ServiceHandler(socket);
 
 
       }
     
           catch (Exception e)
  
              {
          
                   e.printStackTrace();

                }
       
     }
  
      }
     
   catch (Exception e)
 
       {
       
     e.printStackTrace();
     
   }
   
 }


}


class ServiceHandler implements Runnable

{

   
 private Socket socket;

 
   public ServiceHandler (Socket socket)
 
   {

      
  this.socket = socket;

    
    Thread t = new Thread(this);
 
       t.start();
    
}

    public void run()

    {
       
 try
 
       {
 
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

 
            Operation op = (Operation)ois.readObject();

             double result = Server.doOp(op);


             ObjectOutputStream oos =
 new ObjectOutputStream(socket.getOutputStream());

             oos.writeObject( new Double ( result) );


             ois.close();
 
            oos.close();

 
       }
   
     catch (Exception e)
  
      {
     
       e.printStackTrace();

        
}

}

}
