Mirage Source
[Feature] Getting your actual IP *edited* - Printable Version

+- Mirage Source (https://mirage-engine.uk/forums)
+-- Forum: Mirage Source (Nostalgia) (https://mirage-engine.uk/forums/forumdisplay.php?fid=61)
+--- Forum: Archive (2006-2011) (https://mirage-engine.uk/forums/forumdisplay.php?fid=18)
+---- Forum: Source Code Development (https://mirage-engine.uk/forums/forumdisplay.php?fid=51)
+----- Forum: Mirage Source 4 (Visual Basic 6) (https://mirage-engine.uk/forums/forumdisplay.php?fid=44)
+------ Forum: Tutorials (https://mirage-engine.uk/forums/forumdisplay.php?fid=13)
+------ Thread: [Feature] Getting your actual IP *edited* (/showthread.php?tid=2766)



[Feature] Getting your actual IP *edited* - GIAKEN - 24-04-2009

So, I just wrote up my own fine ass function for getting your actual IP. At first it was just 1 line of code, and I'm sure you've seen code using INet before to get your actual IP...but none like this, good sir!

First, open your server:

In modGlobals, add this:

Code:
Public ACTUAL_IP As String
Public IP_Source As String

Then in Sub UpdateCaption, replace the:

Code:
frmServer.Socket(0).LocalIP

With:

Code:
ACTUAL_IP

Then in InitServer (before the final SetStatus message) add this:

Code:
IP_Source = "org"
ACTUAL_IP = GetActualServerIP

What I did with the IP_Source is basically let you choose between using whatismyip.com or whatismyip.org (sometimes one's down). Either make IP_Source = "com" or "org". In my engine I have this load from an INI file...but doing an INI file is a totally different tutorial.

Then go to Project > Components. Look for Microsoft Internet Transfer Control 6.0 and check it and click OK.

Now open frmServer and add the INet control anywhere you want and make sure it's named: INet. Then click on your new INet control and in the properties box make sure Index is set to 0 (it's blank by default).

And...here's the magic itself. Add this to modGeneral (or any other module is fine):

[code]''''''''''''''''''''''''''''''''''''''''''''
' Function written from scratch by: GIAKEN '
''''''''''''''''''''''''''''''''''''''''''''
Public Function GetActualServerIP() As String
Dim RetryValue As Long

Load frmServer.INet(1)

Retry:

'after 2 seconds time the request out
frmServer.INet(RetryValue).RequestTimeout = 2

Select Case IP_Source
Case "org"
Call SetStatus("Retrieving actual IP from whatismyip.org...")

On Error Resume Next
GetActualServerIP = frmServer.INet(RetryValue).OpenURL("http://whatismyip.org", icString)
On Error GoTo ErrHandler

Case "com"
Call SetStatus("Retrieving actual IP from whatismyip.com...")

On Error Resume Next
GetActualServerIP = frmServer.INet(RetryValue).OpenURL("http://whatismyip.com/automation/n09230945.asp", icString)
On Error GoTo ErrHandler

End Select

'if the IP is blank, then handle it as an error
If LenB(GetActualServerIP) = 0 Then GoTo ErrHandler

Call SetStatus("Successfully retrieved actual IP.")
Exit Function

ErrHandler:

'clear the RTE error just in case so we can properly continue
Err.Clear

Call SetStatus("Failed to retrieve actual IP address: timed out.")

frmServer.INet(RetryValue).Cancel
RetryValue = RetryValue + 1

If RetryValue


Re: Getting your actual IP - Nean - 24-04-2009

Really buggy, I don't recommend using this way. Too slow...


Just kidding GIAKEN, it looks good.


Re: Getting your actual IP - GIAKEN - 24-04-2009

Anybody having any problems?


Re: Getting your actual IP - Jared - 24-04-2009

GIAKEN Wrote:Anybody having any problems?

Worked fine for me, Thank you. Smile


Re: Getting your actual IP - GIAKEN - 25-04-2009

You're welcome Big Grin


Re: [Feature] Getting your actual IP *edited* - GIAKEN - 11-05-2009

Just worked on the GetActualServerIP function, redoing the error handling. (it was bugging if it timed out twice)