GNet Chat
BlitzMax Forums/BlitzMax Beginners Area/GNet Chat
| ||
Hello! Its been a few months but I had to do some keyboard mashing and get some of my projects inline. I had to start with a networking base and after looking at some of the examples, most of which were a bit too much for what I needed or a bit too high level for me, I decided to write a little GNet Chat program just to help me understand a little of the networking code. Here is the Server... 'Server SuperStrict Const GNETSLOT_MSG:Int = 0 Local host:TGNetHost = CreateGNetHost() Local port:Int = 1234 Local address:String = "127.0.0.1" Local timeout_ms:Int = 10000 Local listen:Int = GNetListen( host, port ) If Not listen Then RuntimeError "GNetListen failed" Local localObj:TGNetObject = CreateGNetObject:TGNetObject( host ) Local remoteObj:TGNetObject Local objList:TList = New TList Local txt:String[32] Local num:Int[32] Local a:Int = 0 Local msgNum:Int = 0 Local netMsg:String = "" Local maxMsg:Int = 20 Local msg:String[maxMsg] Local i:Int = 0 Graphics 320,240 While Not KeyHit(KEY_ESCAPE) Delay 10 GNetSync host objList = GNetObjects( host, GNET_MODIFIED ) For remoteObj = EachIn objList 'Get type of msg Local tString:String = GetGNetString( remoteObj, 0 ) Local msgType:String = Left(tString,2) If(msgType = "01") Then 'Server is being contacted by client, let client know they connected SetGNetString localObj,GNETSLOT_MSG,"01" 'Cls 'DrawText GetGNetString( remoteObj, 0 ), 10,10 'DrawText Mid(tString,3,Len(tString)-2) + " has connected.", 10,10 tString = Mid(tString,3,Len(tString)-2) + " has connected." ElseIf(msgType = "02") Then 'Client has sent a message 'Cls 'DrawText GetGNetString( remoteObj, 0 ), 10,10 'DrawText Mid(tString,3,Len(tString)-2), 10,10 tString = Mid(tString,3,Len(tString)-2) SetGNetString localObj,GNETSLOT_MSG,"02"+tString EndIf 'Draw a scrolling message box Local c:Int = maxMsg-1 For i = 0 To maxMsg-2 msg[c] = msg[c-1] c = c - 1 Next msg[0] = tString msgNum = msgNum + 1 Next 'Get user input a = GetChar() If a > 0 Then 'User is typing a message 'Print("Key "+ Chr(a) + ", " + a + " was pressed") If a = 8 And Len(netMsg) > 0 Then 'user pressed backspace netMsg = Left(netMsg,Len(netMsg)-1) Else netMsg = netMsg + Chr(a) End If If a = 13 Then 'user is sending chat message by pressing enter SetGNetString localObj,GNETSLOT_MSG,"02Server: " +netMsg 'Draw a scrolling message box Local c:Int = maxMsg-1 For i = 0 To maxMsg-2 msg[c] = msg[c-1] c = c - 1 Next msg[0] = "Server: " +netMsg netMsg = "" End If End If 'Draw Messages Cls SetColor(255,255,255) Local b:Int = 200 For i = 0 To maxMsg-1 If Len(msg[i] > 0) Then DrawText msg[i],10,b b = b - 12 EndIf Next 'Draw User input SetColor(255,0,0) DrawText netMsg, 10,220 Flip Wend CloseGNetHost(host) End Here is the Client... 'Client SuperStrict Const GNETSLOT_MSG:Int = 0 Local name:String = "Player" Local host:TGNetHost = CreateGNetHost() Local address:String = "127.0.0.1" Local port:Int = 1234 Local timeout_ms:Int = 10000 Local connect:Int = GNetConnect( host, address$, port, timeout_ms ) If Not connect Then RuntimeError "GNetConnect failed" Local localObj:TGNetObject = CreateGNetObject:TGNetObject( host ) Local remoteObj:TGNetObject Local objList:TList = New TList Local a:Int = 0 Local msgNum:Int = 0 Local netMsg:String = "" Local maxMsg:Int = 20 Local msg:String[maxMsg] Local i:Int = 0 Local tString:String Local msgType:String Local connReq:Int = 0 Graphics 320,240 While Not KeyHit(KEY_ESCAPE) Delay 10 GNetSync host 'get server messages objList = GNetObjects( host, GNET_MODIFIED ) For remoteObj = EachIn objList 'Get type of msg tString = GetGNetString( remoteObj, 0 ) msgType = Left(tString,2) If(msgType = "01") Then 'Server is being contacted by client, let client know they connected tString = "You are now connected to the server" ElseIf(msgType = "02") Then tString = Mid(tString,3,Len(tString)-2) EndIf 'Draw a scrolling message box Local c:Int = maxMsg-1 For i = 0 To maxMsg-2 msg[c] = msg[c-1] c = c - 1 Next msg[0] = tString msgNum = msgNum + 1 Next If connReq = 0 Then 'server has not acknowledged connection SetGNetString localObj,GNETSLOT_MSG,"01" + name connReq = 1 Else 'Server has acknowledged connection a = GetChar() If a > 0 Then 'User is typing a message 'Print("Key "+ Chr(a) + ", " + a + " was pressed") If a = 8 And Len(netMsg) > 0 Then 'user pressed backspace netMsg = Left(netMsg,Len(netMsg)-1) Else netMsg = netMsg + Chr(a) End If If a = 13 Then 'user is sending chat message by pressing enter SetGNetString localObj,GNETSLOT_MSG,"02"+name+": " +netMsg netMsg = "" End If End If End If 'Draw Server Messages Cls SetColor(255,255,255) Local b:Int = 200 For i = 0 To maxMsg-1 If Len(msg[i] > 0) Then DrawText msg[i],10,b b = b - 12 EndIf Next 'Draw User input SetColor(255,0,0) DrawText netMsg, 10,220 Flip Wend CloseGNetHost(host) End I have uploaded the compiled exe's to... http://www.mediafire.com/?lwhz78nrliah7b7 Let me know what you think! Thanks! |