コード例 #1
0
ファイル: RpcClient.cs プロジェクト: georgSquared/mpos
        public object Call(bool needProfile, bool manualSerialization, Object objOriginal, String methodName, object[] methodParams)
        {
            ClientTcp socket = null;

            if (server == null)
            {
                throw new NetworkException("Need to setup any server for use the RPC Client");
            }

            try
            {
                socket = new ClientTcp();
                socket.Connect(server.Ip, server.RpcServicePort);

                Sent(socket, manualSerialization, needProfile, objOriginal, methodName, methodParams);
                ResponseRemotable response = Receive(socket, objOriginal, methodName);

                if (response.Code == Code.OK)
                {
                    return(response.MethodReturn);
                }
                else if (response.Code == Code.METHOD_THROW_ERROR)
                {
                    throw new RpcException("[Server]: Remote method thrown some errors\n" + response.Except);
                }
                else
                {
                    throw new RpcException("[Server]: RPC call terminated with some errors!\n" + response.Except);
                }
            }
            catch (SocketException e)
            {
                throw new ConnectException("Failed to connect to server: " + server.Ip + ":" + server.RpcServicePort, e);
            }
            finally
            {
                socket.Close();
            }
        }
コード例 #2
0
ファイル: RpcClient.cs プロジェクト: sergiosilvajr/mpos
		//async method can't receive out params!
		private ResponseRemotable Receive(ClientTcp socket, object objOriginal, string methodName)
		{
			//Debug.WriteLine(">> start RpcClient Receive Data");

			ResponseRemotable response = new ResponseRemotable();
			BinaryReader reader = null;

			long downloadTime = 0L;
			int downloadSize = 0;
			if (dataFlag == Code.CUSTOMSTREAM || dataFlag == Code.BSONSTREAM)
			{
				reader = new BinaryReader(socket.ReceiveWithHeaderSize());
			}
			else
			{
				reader = new BinaryReader(socket.ReceiveWithHeaderDebug(ref downloadTime, ref downloadSize));
			}

			//Debug.WriteLine(">> RpcClient Receive wait first flag");
			dataFlag = reader.ReadByte();
			//Debug.WriteLine(">> RpcClient Receive end first flag");

			if (dataFlag == Code.CUSTOMSTREAM)
			{
				response.Code = Code.OK;
				response.MethodReturn = ((RpcSerializable)objOriginal).ReadMethodReturn(reader, methodName);
			}
			else if (dataFlag == Code.BSONSTREAM)
			{
				response.Code = Code.OK;
				response.MethodReturn = GetMethodReturn(reader);
			}
			else if (dataFlag == Code.CUSTOMSTREAMDEBUG)
			{
				response.Code = Code.OK;

				profile.UploadSize = reader.ReadInt32();
				profile.UploadTime = reader.ReadInt64();
				profile.ExecutionCpuTime = reader.ReadInt64();
				response.MethodReturn = ((RpcSerializable)objOriginal).ReadMethodReturn(reader, methodName);

				profile.DonwloadTime = downloadTime;
				profile.DownloadSize = downloadSize;
			}
			else if (dataFlag == Code.BSONSTREAMDEBUG)
			{
				response.Code = Code.OK;

				profile.UploadSize = reader.ReadInt32();
				profile.UploadTime = reader.ReadInt64();
				profile.ExecutionCpuTime = reader.ReadInt64();
				response.MethodReturn = GetMethodReturn(reader);

				profile.DonwloadTime = downloadTime;
				profile.DownloadSize = downloadSize;
			}
			else if (dataFlag == Code.METHOD_THROW_ERROR)
			{
				response.Code = dataFlag;
				response.Except = reader.ReadString();
			}
			else
			{
				response.Code = Code.SERVER_ERROR;
				response.Except = "Code different from expected: " + dataFlag;
			}

			//Debug.WriteLine(">> end RpcClient Receive Data");

			reader.Dispose();
			return response;
		}
コード例 #3
0
ファイル: RpcClient.cs プロジェクト: georgSquared/mpos
        //async method can't receive out params!
        private ResponseRemotable Receive(ClientTcp socket, object objOriginal, string methodName)
        {
            //Debug.WriteLine(">> start RpcClient Receive Data");

            ResponseRemotable response = new ResponseRemotable();
            BinaryReader      reader   = null;

            long downloadTime = 0L;
            int  downloadSize = 0;

            if (dataFlag == Code.CUSTOMSTREAM || dataFlag == Code.BSONSTREAM)
            {
                reader = new BinaryReader(socket.ReceiveWithHeaderSize());
            }
            else
            {
                reader = new BinaryReader(socket.ReceiveWithHeaderDebug(ref downloadTime, ref downloadSize));
            }

            //Debug.WriteLine(">> RpcClient Receive wait first flag");
            dataFlag = reader.ReadByte();
            //Debug.WriteLine(">> RpcClient Receive end first flag");

            if (dataFlag == Code.CUSTOMSTREAM)
            {
                response.Code         = Code.OK;
                response.MethodReturn = ((RpcSerializable)objOriginal).ReadMethodReturn(reader, methodName);
            }
            else if (dataFlag == Code.BSONSTREAM)
            {
                response.Code         = Code.OK;
                response.MethodReturn = GetMethodReturn(reader);
            }
            else if (dataFlag == Code.CUSTOMSTREAMDEBUG)
            {
                response.Code = Code.OK;

                profile.UploadSize       = reader.ReadInt32();
                profile.UploadTime       = reader.ReadInt64();
                profile.ExecutionCpuTime = reader.ReadInt64();
                response.MethodReturn    = ((RpcSerializable)objOriginal).ReadMethodReturn(reader, methodName);

                profile.DonwloadTime = downloadTime;
                profile.DownloadSize = downloadSize;
            }
            else if (dataFlag == Code.BSONSTREAMDEBUG)
            {
                response.Code = Code.OK;

                profile.UploadSize       = reader.ReadInt32();
                profile.UploadTime       = reader.ReadInt64();
                profile.ExecutionCpuTime = reader.ReadInt64();
                response.MethodReturn    = GetMethodReturn(reader);

                profile.DonwloadTime = downloadTime;
                profile.DownloadSize = downloadSize;
            }
            else if (dataFlag == Code.METHOD_THROW_ERROR)
            {
                response.Code   = dataFlag;
                response.Except = reader.ReadString();
            }
            else
            {
                response.Code   = Code.SERVER_ERROR;
                response.Except = "Code different from expected: " + dataFlag;
            }

            //Debug.WriteLine(">> end RpcClient Receive Data");

            reader.Dispose();
            return(response);
        }