internal static void CheckTimeouts() { while (responseAdded.Count > 0 && Time.time - responseAdded[responseAdded.Keys[0]] > pendingResponses[responseAdded.Keys[0]].Timeout) { ulong key = responseAdded.Keys[0]; RpcResponseBase response = pendingResponses[key]; response.IsDone = true; response.IsSuccessful = false; Remove(key); } }
public void InvokeRequest_AmbiguousRequest_ErrorResponse() { RpcRequest stringRequest = new RpcRequest("1", "2.0", "AmbiguousMethod", 1); RpcRoute route = new RpcRoute(); route.AddClass <TestRouteClass>(); IRpcInvoker invoker = new DefaultRpcInvoker(); RpcResponseBase response = invoker.InvokeRequest(stringRequest, route); RpcErrorResponse errorResponse = Assert.IsType <RpcErrorResponse>(response); Assert.NotNull(errorResponse.Error); Assert.Equal(errorResponse.Error.Code, (int)RpcErrorCode.AmbiguousMethod); }
public void InvokeRequest_AsyncMethod_Valid() { RpcRequest stringRequest = new RpcRequest("1", "2.0", "AddAsync", 1, 1); RpcRoute route = new RpcRoute(); route.AddClass <TestRouteClass>(); IRpcInvoker invoker = new DefaultRpcInvoker(); RpcResponseBase response = invoker.InvokeRequest(stringRequest, route); RpcResultResponse resultResponse = Assert.IsType <RpcResultResponse>(response); Assert.NotNull(resultResponse.Result); Assert.Equal(resultResponse.Result, 2); }
public void InvokeRequest_Int64RequestParam_ConvertToInt32Param() { RpcRequest stringRequest = new RpcRequest("1", "2.0", "IntParameter", (long)1); RpcRoute route = new RpcRoute(); route.AddClass <TestRouteClass>(); IRpcInvoker invoker = new DefaultRpcInvoker(); RpcResponseBase response = invoker.InvokeRequest(stringRequest, route); RpcResultResponse resultResponse = Assert.IsType <RpcResultResponse>(response); Assert.NotNull(resultResponse.Result); Assert.IsType <int>(resultResponse.Result); Assert.Equal(resultResponse.Result, 1); }
public void InvokeRequest_StringParam_ParseAsGuidType() { Guid randomGuid = Guid.NewGuid(); RpcRequest stringRequest = new RpcRequest("1", "2.0", "GuidTypeMethod", randomGuid.ToString()); RpcRoute route = new RpcRoute(); route.AddClass <TestRouteClass>(); IRpcInvoker invoker = new DefaultRpcInvoker(); RpcResponseBase stringResponse = invoker.InvokeRequest(stringRequest, route); RpcResultResponse stringResultResponse = Assert.IsType <RpcResultResponse>(stringResponse); Assert.Equal(stringResultResponse.Result, randomGuid); }
internal static void HandleClientRPCResponse(ulong clientId, Stream stream) { using (PooledBitReader reader = PooledBitReader.Get(stream)) { ulong responseId = reader.ReadUInt64Packed(); if (ResponseMessageManager.ContainsKey(responseId)) { RpcResponseBase responseBase = ResponseMessageManager.GetByKey(responseId); if (responseBase.ClientId != clientId) { return; } ResponseMessageManager.Remove(responseId); responseBase.IsDone = true; responseBase.Result = reader.ReadObjectPacked(responseBase.Type); responseBase.IsSuccessful = true; } } }
internal static void Add(ulong key, RpcResponseBase value) { pendingResponses.Add(key, value); responseAdded.Add(key, Time.time); }