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) { var contract = new RedirectRepeatResponse(); byte masterNodeId = 1; IPAddress publiIpAddress; if (PublicIPAddressReader.TryParsePublicIpAddress(MasterServerSettings.Default.PublicIPAddress, out publiIpAddress) == false) { // TODO: how to handle ? log.WarnFormat("Failed to parse public ipAdress"); contract.Address = ""; } else { switch (this.NetworkProtocol) { case NetworkProtocolType.Tcp: contract.Address = new IPEndPoint(publiIpAddress, MasterServerSettings.Default.MasterRelayPortTcp + masterNodeId - 1).ToString(); break; case NetworkProtocolType.WebSocket: contract.Address = new IPEndPoint(publiIpAddress, MasterServerSettings.Default.MasterRelayPortWebSocket + masterNodeId - 1).ToString(); break; case NetworkProtocolType.Udp: // no redirect through relay ports for UDP... how to handle? contract.Address = new IPEndPoint(publiIpAddress, MasterServerSettings.Default.MasterRelayPortUdp + masterNodeId - 1).ToString(); break; } } var response = new OperationResponse(operationRequest.OperationCode, contract); response.ReturnCode = (short)ErrorCode.RedirectRepeat; response.DebugMessage = "redirect"; this.SendOperationResponse(response, sendParameters); }