protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) { var contract = new RedirectRepeatResponse(); const byte masterNodeId = 1; // TODO: don't lookup for every operation! IPAddress publicIpAddress = PublicIPAddressReader.ParsePublicIpAddress(MasterServerSettings.Default.PublicIPAddress); switch (this.NetworkProtocol) { case NetworkProtocolType.Tcp: contract.Address = new IPEndPoint( publicIpAddress, MasterServerSettings.Default.MasterRelayPortTcp + masterNodeId - 1).ToString (); break; case NetworkProtocolType.WebSocket: contract.Address = new IPEndPoint( publicIpAddress, MasterServerSettings.Default.MasterRelayPortWebSocket + masterNodeId - 1). ToString(); break; case NetworkProtocolType.Udp: // no redirect through relay ports for UDP... how to handle? contract.Address = new IPEndPoint( publicIpAddress, MasterServerSettings.Default.MasterRelayPortUdp + masterNodeId - 1).ToString (); break; } var response = new OperationResponse(operationRequest.OperationCode, contract) { ReturnCode = (short)ErrorCode.RedirectRepeat, DebugMessage = "redirect" }; this.SendOperationResponse(response, sendParameters); }
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) { Dictionary <byte, object> dict = operationRequest.Parameters; foreach (object value in dict.Values) { MasterApplication.log.Info("============RedirectedClientPeer==========:" + value.ToString()); } var contract = new RedirectRepeatResponse(); const byte masterNodeId = 1; // TODO: don't lookup for every operation! IPAddress publicIpAddress = PublicIPAddressReader.ParsePublicIpAddress(MasterServerSettings.Default.PublicIPAddress); switch (this.NetworkProtocol) { case NetworkProtocolType.Tcp: contract.Address = new IPEndPoint( publicIpAddress, MasterServerSettings.Default.MasterRelayPortTcp + masterNodeId - 1).ToString (); break; case NetworkProtocolType.WebSocket: contract.Address = new IPEndPoint( publicIpAddress, MasterServerSettings.Default.MasterRelayPortWebSocket + masterNodeId - 1). ToString(); break; case NetworkProtocolType.Udp: // no redirect through relay ports for UDP... how to handle? contract.Address = new IPEndPoint( publicIpAddress, MasterServerSettings.Default.MasterRelayPortUdp + masterNodeId - 1).ToString (); break; } var response = new OperationResponse(operationRequest.OperationCode, contract) { ReturnCode = (short)ErrorCode.RedirectRepeat, DebugMessage = "redirect" }; BaseHandler handler = DictTools.GetValue <ServerToServer.Operations.OperationCode, BaseHandler>(MasterApplication.Instance.Handlerict, (ServerToServer.Operations.OperationCode)operationRequest.OperationCode); if (handler != null) { handler.OnOperationRequest(operationRequest, sendParameters, this); } else { BaseHandler defaultHandler = DictTools.GetValue <ServerToServer.Operations.OperationCode, BaseHandler>(MasterApplication.Instance.Handlerict, ServerToServer.Operations.OperationCode.Default); defaultHandler.OnOperationRequest(operationRequest, sendParameters, this); } this.SendOperationResponse(response, sendParameters); }