Inheritance: System.EventArgs
        private void ReadCallback(IAsyncResult ar)
        {
            recieveDone.Set();

            String content = String.Empty;

            StateObject state = (StateObject)ar.AsyncState;
            Socket handler = state.workSocket;

            int bytesRead = handler.EndReceive(ar);

            if (bytesRead > 0)
            {
                state.sb.Append(Encoding.ASCII.GetString(state.buffer,
                                0, bytesRead));
                content = state.sb.ToString();

                String[] data = content.Split(';');

                if(data[0].Equals("reply"))
                {
                    ConnectionAcceptEventArgs e = new ConnectionAcceptEventArgs(data[1]);
                    OnConnectionAccept(e);
                }
                else if(data[0].Equals("startgame"))
                {
                    ConnectionRequestEventArgs e = new ConnectionRequestEventArgs(data[1]);
                    OnConnectionRequest(e);
                }
                else if(data[0].Equals("step"))
                {
                    StepEventArgs e = new StepEventArgs(deserializeToObject(state.buffer,5));
                    OnStep(e);
                }

            }
        }
 protected virtual void OnStep(StepEventArgs e)
 {
     StepEventHandler handler = stepEventHandler;
     if (handler != null)
     {
         handler(this, e);
     }
 }