public Object start(TransferObject to) {
            Object resultObject = null;

            String calleeClass = to.getCalleeClass();
            String calleeMethod = to.getCalleeMethod();

            mStateObject.transferObject = to;

            //check if close method, close client
            if (calleeMethod == METHOD_CLOSE) {
                Close(mStateObject);
                return resultObject;
            }

            //set default server call proxy
            if (to.getServerCallProxy() != null) {
                serverCallProxy = to.getServerCallProxy();
            }

            try {
                if (mStateObject.workSocket == null || !mStateObject.workSocket.Connected || closed) {
                    Connect();
                }
                Send(mStateObject);
                resultObject = Receive(mStateObject);

            } catch (Exception e) {
                Logging.LogError("HostIp and Port: [" + hostIp + ":" + hostPort + "]");
                Logging.LogError("Callee Class and Method: [" + calleeClass + "." + calleeMethod + "]");
                Logging.LogError(e.ToString());
                Close(mStateObject);
                throw e;
            }
            return resultObject;
        }
        public Object start(TransferObject to) {
            Object resultObject = null;

            String calleeClass = to.getCalleeClass();
            String calleeMethod = to.getCalleeMethod();

            StateObject stateObject = new StateObject();
            stateObject.transferObject = to;

            try {
                if (Connect(stateObject)) {

                    Send(stateObject);

                    resultObject = Receive(stateObject);
                }
            } catch (Exception e) {
                Logging.LogError("Callee Class and Method: [" + calleeClass + "." + calleeMethod + "]");
                Logging.LogError(e.ToString());
            } finally {
                Close(stateObject);
            }

            return resultObject;
        }
        public Object execute(TransferObject to) {

            String calleeClass = to.getCalleeClass();
            String calleeMethod = to.getCalleeMethod();

            Object retobj = null;
            try {
                Type type = Type.GetType(calleeClass);
                Object instance = Activator.CreateInstance(type);
                MethodInfo method = type.GetMethod(calleeMethod);
                retobj = method.Invoke(instance, new object[] { to });
            } catch (Exception e) {
                Logging.LogError(e.ToString());
            }

            return retobj;
        }
        private void execute(TransferObject to) {

            String calleeClassName = to.getCalleeClass();

            //Check default proxy, don't need reflection.
            if (calleeClassName.Equals(TransferObject.DEFAULT_PROXY)) {
                if (serverCallProxy != null) {
                    serverCallProxy.execute(to);
                }
            } else {
                String calleeMethod = to.getCalleeMethod();
                Type type = Type.GetType(calleeClassName);
                Object instance = Activator.CreateInstance(type);
                MethodInfo method = type.GetMethod(calleeMethod);
                method.Invoke(instance, new object[] { to });
            }

        }