Code archives/Networking/Snakes Client and Server
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This was based initially on Wing's TCP/IP code - I've added a little bit of extra code - tried to comment it effectively. You can run 3 or 4 clients and make 'art' with them. The last addition to the code was the proximity function which increases the size of a horizontal bar beneath the client' play area dependant upon how close you are to other players (10 to 50 pixels in steps of 10) [Edit] 2014, I revisited this and it just bugged the hell outa me I didn't codebox it, Hmmm it might be the vino, but it would appear you cannot codebox in the code archives, oh well - theres an extra de-limiter in the code now to delimit the Server and client code at least. | |||||
[codebox]; WORMCLIENT.bb - you can run up to 10 clients - dependant
; on CPU grunt.......Although even on my laptop I could not
; get my CPU above 57 percent
; a little SNAKES client by Blitzplotter, note you will need
; to compile the associated code WORMSERVER, make
; the executable WORMSERVER & the client will automatically
; try and start a server if one is not running. If you close the
; client(s) before closing the WORMSERVER, the WORMSERVER will
; mop up the 123456789 files that appear whilst the clients &
; server are running.
Global print_once=0
Global title_once=0
max_bank = 512
sent_count=0
Dim srv_player_data(512); place to store what the server reckons state of play is
test_x_move=5; amount of packets to have sent before start adjusting x co-ord of this player
test_y_move=5; amount of packets to have sent before start adjusting y co-ord of this player
x_move=0
y_move=0
Global box_size=500
Global player_score=0
Global player_mult_score=0
Global worm_walled=0
Global worm_hit_player=0
Global x_check_move=0
Global y_check_move=0
maxplayers=35
params=3 ; 0=playernum
XX#=1 ; 1=x
YY#=2 ; 2=y;
ALIVE#=3 ; 3=alive set to (1) or (0) for dead
Dim collArray(35,5)
Global this_player=99
Global this_player_num = 0
Global change_player_num_once=0
Dim proxArray(5) ; 5 levels of proximity
;basically got eight directions to move the worm in. 2 ways to do this, send
Dim move_logic_x(8)
Dim move_logic_y(8)
Global move_count=1 ;note this goes up to 8 & cycles back to 1
move_logic_x(0)=0 : move_logic_y(0)=0 ;dead, therefore do not move
move_logic_x(1)=1 : move_logic_y(1)=0 ;right NOTE 1=+1; 2=-1 on server
move_logic_x(2)=1 : move_logic_y(2)=1 ;up right
move_logic_x(3)=0 : move_logic_y(3)=1 ;up
move_logic_x(4)=2 : move_logic_y(4)=1 ;up Left
move_logic_x(5)=2 : move_logic_y(5)=0 ;left
move_logic_x(6)=2 : move_logic_y(6)=2 ;down left
move_logic_x(7)=0 : move_logic_y(7)=2 ;down
move_logic_x(8)=1 : move_logic_y(8)=2 ;down right
tcp_sendbank=CreateBank(max_bank)
tcp_recbank=CreateBank(max_bank)
;use this string to run numerous clients on ONE laptop
Global USE_LOOPBACK$="127.0.0.1"
;If you want to access a server on your network, open a
;command prompt and enter ipconfig on the PC/laptop you
;intend to run the server on:-
Global USE_NETWORK$="192.168.1.4" ; modify this IP for a remote
; computer on your LAN you wish
; to attach to the Server
link_string$=USE_LOOPBACK$ ;will detect the WORMSERVER if running on the client computer
;link_string$=USE_NETWORK$
;Graphics3D 700,500,16,2 ; B3D
Graphics 800,600,16,2 ;
;populate the collision Array params:
For count=1 To 30
collArray(count,XX)=5
collArray(count,YY)=5
collArray(count,ALIVE)=1
Next
;link=OpenTCPStream("127.0.0.1",7056) ;NOTE: might need to replace with your IP info
;link=OpenTCPStream("192.168.0.2",7056) ;
link=OpenTCPStream(link_string,7056)
If Not link
Print "failed to create link - No server detected - looking.....4" : ExecFile("WORMSERVER.exe"): Delay 1500
link=OpenTCPStream(link_string,7056)
If Not link
wait$=Input ("Waited 15 seconds to detect Server - want to wait longer? (Y or N):")
If wait$="y" Or wait$="Y"
Print "okay, hanging on for a 30 second now.... last chance": Delay 30000
link=OpenTCPStream(link_string,7056)
If Not link
Print "Ending...": Delay 1500:
End
Else
Print " Server located, finally."
;perimeter
Line box_size,0,box_size,box_size
Line 0,box_size,box_size,box_size
EndIf
Else
Print "Terminating Client.": Delay 1500: End
End If
Else
Print" Server started by moi.": Delay 1500: Cls
EndIf
Else
Text 520,12,("Server detected")
EndIf
Text 12,580,(" Connected.. This player is Alive in the world....")
status=12; we emulate a logged in client
Text 520,30,("left & right cursors to turn")
; Draw perimeter
Line box_size,0,box_size,box_size
Line 0,box_size,box_size,box_size
While Not KeyHit(1)
;If Eof(link) Then Print "Server has gone, 5 secs until this is gone too.... " : Delay 5000 : End
If Eof(link)
Print "Server has gone, you had a score of:"+((player_mult_score*255)+player_score)
wait$=Input ("Want to see if Server will restart? (Y or N):")
If wait$="y" Or wait$="Y"
Print "okay, hanging on for a 8 second wait before re-try.... last chance": Delay 8000
link=OpenTCPStream(link_string,7056)
If Not link
Print "Ending...": Delay 1500:
End
Else
Print "Server located."
status=14; attempt at pushing x & y to server
EndIf
Delay 5000
Cls
;perimeter
Line 512,0,512,512
Line 0,512,512,512
Else
Print "Terminating Client. This was player"+this_player_num: Delay 1500: End
End If
EndIf
Select status
Case 10
If player_score>=255
player_score=1
player_mult_score=player_mult_score+1
EndIf
If ReadAvail(link)>=max_bank
;time to read some ;)
r=ReadBytes(tcp_recbank,link,0,max_bank)
If pon=1
Print "have readin "+r+" bytes from server."
Print "-----------------------------------------------------"
EndIf
;my attempt at accessing sent count
xth=PeekByte(tcp_recbank,0) ;the amount of clients server has detected all
;together: Note if a client is registered
;by the server - the logic will dictate that
;once that client dies it stays dead until
; a new 'game' is ininitiated & the server
;opens up all players for joining again. The
;problem is that the server decrements the
; client count at the moment when a player
; stroke client is detected as 'left'.
serv_count=PeekByte(tcp_recbank,1)
;attempt at copying in data received from server now
For copy_ct=1 To 511
srv_player_data(copy_ct)=PeekByte(tcp_recbank,copy_ct)
Next
;current players
mem_loc=((20*1)-10)
For loop = 1 To xth ;cycling through the number of clients server states
;is connected:
;Note - the xth is simply a loop index of how many clients are currently attached
;work out where in 512 bytes this players x and y co-ords are:
mem_loc=((20*loop)-10)
If pon=1
Print"mem_loc is:"+mem_loc
Print "player: "+loop+" x co-ord:"+srv_player_data(mem_loc+1)
Print "player: "+loop+" y co-ord:"+srv_player_data(mem_loc+2)
EndIf
If skiponce<3 ;needs to pass 3 times before it settles down
skiponce=skiponce+1
Else
Text 20,550,"This is Player :"+this_player_num
EndIf
Flip
Select loop
Case 1
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;Text 610,(112)+loop*11,"player:"+loop+" score:"+player_score
;Text 610,(132)+loop*11,"player:"+loop+" score:"+test_score
collArray(1,XX)=srv_player_data(mem_loc+1)*2
collArray(1,YY)=srv_player_data(mem_loc+2)*2
Case 2
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(2,XX)=srv_player_data(mem_loc+1)*2
collArray(2,YY)=srv_player_data(mem_loc+2)*2
Case 3
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(3,XX)=srv_player_data(mem_loc+1)*2
collArray(3,YY)=srv_player_data(mem_loc+2)*2
Case 4
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(4,XX)=srv_player_data(mem_loc+1)*2
collArray(4,YY)=srv_player_data(mem_loc+2)*2
Case 5
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(5,XX)=srv_player_data(mem_loc+1)*2
collArray(5,YY)=srv_player_data(mem_loc+2)*2
Case 6
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(6,XX)=srv_player_data(mem_loc+1)*2
collArray(6,YY)=srv_player_data(mem_loc+2)*2
Case 7
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(7,XX)=srv_player_data(mem_loc+1)*2
collArray(7,YY)=srv_player_data(mem_loc+2)*2
Case 8
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(8,XX)=srv_player_data(mem_loc+1)*2
collArray(8,YY)=srv_player_data(mem_loc+2)*2
Case 9
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(9,XX)=srv_player_data(mem_loc+1)*2
collArray(9,YY)=srv_player_data(mem_loc+2)*2
Case 10
Plot srv_player_data(mem_loc+1)*2,srv_player_data(mem_loc+2)*2
;" is alive";+srv_player_data(mem_loc+1);+" Y:"+srv_player_data(mem_loc+2)
collArray(10,XX)=srv_player_data(mem_loc+1)*2
collArray(10,YY)=srv_player_data(mem_loc+2)*2
End Select
Next
If change_player_num_once=0
change_player_num_once=1
this_player_num=xth
;this should ensure that this player num is only set once
EndIf
status=12 ; Yeppp time to respond...
End If
Case 12
;THIS IS THE SENDER
; player count: 1 byte
; player: x, y co -ords, 2 bytes
; shot anything: yes/no 1 byte
; projectile alive: 1 byte
; projectile x,y: 2 bytes
; player world count: 1 byte
; leaving 2 bytes for whatever
;byte 1: 1, add 1 to x,2 subtract 1 from x
;byte 2: 1, add 1 to y,2 subtract 1 from y
;byte seven: chaning to 12 from the 13 the server sets it to
;haha client time to spam server first we make a cool tcp packet with random nunbers.
For i=0 To (max_bank-1)
PokeByte tcp_sendbank,i,0
If sentcount<255
PokeByte tcp_sendbank,0,sent_count
Else sentcount=255
EndIf
Next
PokeByte tcp_sendbank,3,this_player_num; poke the player_num byte the changed once number
;encapsulate the move stuff within if alive logic
If worm_walled=0
If x_move>test_x_move Then
;Print"set x________ to move"
PokeByte tcp_sendbank,1,move_logic_x(move_count);1 here means server needs To move x For this
;player/client by +1
;x_check_move=2*(move_logic_x(move_count)) this is only 1 to 8 doh!
;Note the client is Not self aware therefore how to instigate direction changes
;as a result of input.....
;easy - need to detect left cursor & right cursor first - this will be the
;controlling influence for the worm.....
End If
If y_move>test_y_move Then
;Print"set y________ to move"
PokeByte tcp_sendbank,2,move_logic_y(move_count) ;1 here means server needs to move y for this
;player/client by +1
;y_check_move=2*(move_logic_y(move_count))
End If
Else
PokeByte tcp_sendbank,1,move_logic_x(0);1 here means server needs To move x For this by nothing
PokeByte tcp_sendbank,2,move_logic_y(0);1 here means server needs to move y for this by nothing
EndIf; endif for worm_walled code - basically this worm WILL MOVE NO MORE!!!!!!
this_dead_mem_loc=((20*(loop-1)-10))
If collArray(this_player_num,XX)>498 Or collArray(this_player_num,YY)>498 Then
worm_walled=1
PokeByte tcp_sendbank,(this_player_num*20)-13,12 ;13 here means this client is unlucky and dead!!!!
; NOTE: if going to
;Text 250,250,"WORM SPLATTERED INTO A WALL..xmove: "+x_move+" &y:"+y_move
this_dead_mem_loc=((20*(loop-1)-10))
Text 40,420,"player: "+this_player_num+" dead at x co-ord:"+collArray(this_player_num,XX)
Text 40,440,"player: "+this_player_num+" dead at y co-ord:"+collArray(this_player_num,YY)
Text 40,460,"player: "+this_player_num+" Score:"++((player_mult_score*255)+player_score)
PokeByte tcp_sendbank,1,move_logic_x(0);1 here means server needs To move x For this by nothing
PokeByte tcp_sendbank,2,move_logic_y(0);1 here means server needs to move y for this by nothing
EndIf
If worm_walled=0
PokeByte tcp_sendbank,7,12 ;12 here means this client is alive
;this'll hopefully be changing the server from
;13 to 12........................
;player/client by +1
Text 500,380,("player not hit wall")
;player alive so increment score
player_score=player_score+1
Else
;need to send the number here to server to inform player walled (& hit other player)
Text 500,400,("player hit wall")
PokeByte tcp_sendbank,7,13
EndIf
PokeByte tcp_sendbank,5,player_score
PokeByte tcp_sendbank,6,player_mult_score
s=WriteBytes (tcp_sendbank,link,0,max_bank)
;Print "Sending "+s+" bytes to server."+sent_count+" times"
sent_count=sent_count+1
status=10 ; Well we go out and wait for packet
Case 14
;Client to contact server first we make a cool tcp packet
For i=0 To (max_bank-1)
PokeByte tcp_sendbank,i,0
If sentcount<255
PokeByte tcp_sendbank,0,sent_count
Else sentcount=255
EndIf
Next
If x_move>test_x_move Then
PokeByte tcp_sendbank,1,srv_player_data(mem_loc+1) ;1 here means server needs to move x for this
;player/client by +1
End If
If y_move>test_y_move Then
PokeByte tcp_sendbank,2,srv_player_data(mem_loc+2) ;1 here means server needs to move y for this
;player/client by +1
End If
PokeByte tcp_sendbank,1,srv_player_data(mem_loc+1)
PokeByte tcp_sendbank,2,srv_player_data(mem_loc+2)
s=WriteBytes (tcp_sendbank,link,0,max_bank)
sent_count=sent_count+1
status=10
Case 16
If ReadAvail(link)>=max_bank
;time to read some ;)
r=ReadBytes(tcp_recbank,link,0,max_bank)
If pon=1
Print "have readin "+r+" bytes from server."
Print "-----------------------------------------------------"
EndIf
;accessing sent count
xth=PeekByte(tcp_recbank,0)
serv_count=PeekByte(tcp_recbank,1)
;copying in data received from server now
For copy_ct=1 To 511
srv_player_data(copy_ct)=PeekByte(tcp_recbank,copy_ct)
Next
;current players
mem_loc=((20*1)-10)
For loop = 1 To xth
;work out where in 512 bytes this players x and y co-ords are:
mem_loc=((20*loop)-10)
If pon=1
Print"mem_loc is:"+mem_loc
Print "player: "+loop+" x co-ord:"+srv_player_data(mem_loc+1)
Print "player: "+loop+" y co-ord:"+srv_player_data(mem_loc+2)
EndIf
Next
status=12 ; Yeppp time to respond...
End If
End Select
play_ct=0
;update x and y co-ords for this client to send to server:-
x_move = x_move+1
y_move = y_move+1
;Delay 10 ; yep we have to delay some here to emulate many clients.. or cpu dies.
Delay 50
VWait 1; let the CPU rest
If KeyDown(203)
;Text 400,400,("left detected")
If move_count>1
move_count=move_count-1
Else
move_count=8
EndIf
;Else
;Text 400,400,(" nowt detected")
EndIf
If KeyDown(205)
;Text 400,400,("right detected")
If move_count<8
move_count=move_count+1
Else
move_count=1
EndIf
EndIf
If title_once<=6
AppTitle "Worm Client Number "+this_player_num
title_once=title_once+1
Text 20,500,"vvvvvv Proximity meter: 10 to 50 units respectively vvvvvv"
EndIf
;call the proximity detector function
If xth>1
proximity(this_player_num,xth)
EndIf
Wend
Function proximity(thisplayer,maxplayers)
For checkOthers=1 To maxplayers
Local XX=1
Local YY=2
If checkOthers=thisplayer
;do nothing
Else
If collArray(checkOthers,XX)>collArray(thisplayer,XX)
xdiff=collArray(checkOthers,XX)-collArray(thisplayer,XX)
Else
xdiff=collArray(thisplayer,XX)-collArray(checkOthers,XX)
EndIf
If collArray(checkOthers,YY)>collArray(thisplayer,YY)
ydiff=collArray(checkOthers,YY)-collArray(thisplayer,YY)
Else
ydiff=collArray(thisplayer,YY)-collArray(checkOthers,YY)
EndIf
For closeness=50 To 10 Step -10
If xdiff<closeness
If xdiff>(closeness-10)
proxArray(closeness/10)=proxArray(closeness/10)+1
EndIf
EndIf
Next
EndIf
Next
;draw the five proximity lines:
For drawProx=1 To 5
Line 1,510+(drawProx*6),(proxArray(drawProx)),510+(drawProx*6)
Next
End Function
;END CLIENT CODE
;=========================================================================
[\codebox]
[codebox]
;WORMSERVER.bb - create an executable called WORMSERVER.exe
; in the same directory as the WORMCLIENT.exe
;removed need for a separate folder to hide files in
;VARS------------------------------------------------------------
Dim player_data(512) ;512 bytes to copy into each clients
;Populate dummy player data
For count = 10 To 490 Step 20
player_data(count+1)=player_number ;x (-9)
player_data(count+2)=count ;y (-8)
player_data(count+3)=count ;THIS IS JUST A COUNT OF CLIENTS THAT ARE RUNNING
player_data(count+4)=0 ;(-7) 0 bullet dead, 1 alive - now player num
;(-6)player score - not doing bullets for a while anyway.make this score count 1(1-255)
player_data(count+5)=count+10 ;(-5)2nd part score make this score count 2(255*255) i.e. 10+(2*255)
player_data(count+6)=count+10 ;(-4)
player_data(count+7)=13 ;alive signified by 13
Next
max_bank=512
global_client_count=0
Dim file_name$(255); 255 possible clients - who'd need more?
Global file_count=0
Type session
Field link
Field tcp_sendbank
Field tcp_recbank
Field status
Field player_number
End Type
Graphics 400,600,16,2 ; B3D
AppTitle "Serving worms with killer logic"
server=CreateTCPServer(7056)
;print "server is running.."
msmin=9999999 ; minimums millisecs :D
While Not KeyHit(1)
stream = AcceptTCPStream(server)
If stream
global_client_count=global_client_count+1
;print "New stream detected. memory allocated."
ses.session = New session
ses\link=stream
ses\tcp_sendbank = CreateBank(max_bank)
ses\tcp_recbank = CreateBank(max_bank)
ses\status =10 ; Simulate login.
;ses\client_count=global_client_count
ses\player_number=global_client_count
Print "global_client_count is:"+ses\player_number
fn_create_file(Int ses\link)
End If
oldms=MilliSecs()
;Validate streams..
For ses.session = Each session
If Eof(ses\link)
;print "A session called "+ses\link+" has stop working."
;print "Frees memory banks for session "+ses\link
FreeBank ses\tcp_sendbank
FreeBank ses\tcp_recbank
;print "deletes sessions "+ses\link
numberin=ses\link
fn_delete_file(Int ses\link)
Delete ses
;global_client_count=global_client_count-1 ;removing This could have BIG ramifications:-
;instead of doing the aboveset the dead byte in the client:-
End If
Next
For ses.session = Each session; this is looking at the first few bytes sent in from each session/client
Select ses\status
Case 10
If ReadAvail(ses\link)>=max_bank
;so we got a new packet :D and its all 100% secure... so we can go on live our lifes
r=ReadBytes (ses\tcp_recbank,ses\link,0,max_bank)
;print "for session "+ses\link+" who has a tcp recbank of:"+ses\tcp_recbank
;print "read "+r+" bytes from stream"
;my attempt at accessing sent count
rx_count=PeekByte(ses\tcp_recbank,0)
If PeekByte(ses\tcp_recbank,3)>0
client_has_player_num=PeekByte(ses\tcp_recbank,3)
;print"***********************************************************"
Print" Found player number in data: "+client_has_player_num+"......Press any key"
;so try setting the player_number for sending back to 41
ses\player_number=client_has_player_num ;IS NOW WORKING
Else
Print "Setting playernum to :"+global_client_count+" Press any key"
;WaitKey
client_has_player_num = global_client_count
playerNumLoc=(20*ses\player_number)-7 ;
player_data(playerNumLoc)=client_has_player_num
EndIf
; end add player_number to a player if he already does not have one
;############################################################################
;##########################################
; player alive or dead status
If PeekByte(ses\tcp_recbank,7)=12
alive_data=PeekByte(ses\tcp_recbank,2)
;print"***********************************************************"
Print" Found alive data (set to 12): "+alive_data
;print"***********************************************************"
;----------------------------------------------------------------------
;okay moving the logic to move the worm here coz its alive:-
;############################################################################
; now access the data wrt the player/client
;###################################
;player score discovery
If PeekByte(ses\tcp_recbank,5)>0
client_has_score=PeekByte(ses\tcp_recbank,5)
client_big_score=PeekByte(ses\tcp_recbank,6)
;print"***********************************************************"
Print client_has_player_num+" Found player number score in data: "+client_has_score
Print client_has_player_num+" Found player multiplier score in data: "+client_big_score
;print"***********************************************************"
Else
client_has_score = 69
playerNumLoc=(20*ses\player_number)-6
player_data(playerNumLoc)=client_has_score
;print"***********************************************************"
Print" Assigned a player score to a new client"
;print"***********************************************************"
;2nd bit of score
playerNumLoc=(20*ses\player_number)-5
player_data(playerNumLoc)=client_has_score
EndIf
If PeekByte(ses\tcp_recbank,1)>0
xmove=PeekByte(ses\tcp_recbank,1)
;print"XMOVE detected as :"+xmove
If xmove=1;add one
xloc=(20*ses\player_number)-9
If player_data(xloc)<=250
player_data(xloc)=player_data(xloc)+1
;print"adding ++++++++++++++++++++++++X"
;print"adding ++++++++++++++++++++++++X"
EndIf
EndIf
If xmove=2
;subtract one
xloc=(20*ses\player_number)-9
If player_data(xloc)>=1
player_data(xloc)=player_data(xloc)-1
EndIf
EndIf
If xmove>2
xloc=(20*ses\player_number)-9
player_data(xloc)=xmove
EndIf
EndIf
If PeekByte(ses\tcp_recbank,2)>0
ymove=PeekByte(ses\tcp_recbank,2)
;;print "Detected Move request for y of client:"+ses\tcp_recbank
yloc=(20*ses\player_number)-8
ymove=PeekByte(ses\tcp_recbank,2)
If ymove=1;add one
yloc=(20*ses\player_number)-8
If player_data(yloc)<=250
player_data(yloc)=player_data(yloc)+1
EndIf
EndIf
If ymove=2;subtract one
yloc=(20*ses\player_number)-8
If player_data(yloc)>=1
player_data(yloc)=player_data(yloc)-1
EndIf
EndIf
If ymove>2;refresh from client
yloc=(20*ses\player_number)-8
;If player_data(yloc)>=1
player_data(yloc)=ymove
;EndIf
EndIf
EndIf
;---------------------------------------------------------------------
Else
client_has_player_num = global_client_count
playerNumLoc=(20*ses\player_number)-3 ;might be right?
player_data(playerNumLoc)=client_has_player_num
EndIf
If PeekByte(ses\tcp_recbank,7)=13
Cls
;Text 20,100,
Print "Wall hit for player:"+player_data(playerNumLoc)
;Text 20,120,
Print "last xmove was:"+xmove+"last ymove was:"+ymove
EndIf
ses\status=12 ; well time to reply this packet next round :D
EndIf
Case 12 ; Well time to reply a packet.
;First we fill it upp with 0
For i=0 To (max_bank-1)
;PokeByte ses\tcp_sendbank,i,Rnd(255)
PokeByte ses\tcp_sendbank,i,0
Next
rx_count=PeekByte(ses\tcp_recbank,0)
;client_count=PeekByte(ses\tcp_recbank,0)
PokeByte ses\tcp_sendbank,0,global_client_count
PokeByte ses\tcp_sendbank,1,rx_count
For count = 10 To 490
PokeByte ses\tcp_sendbank,count,player_data(count); copying in data
Next
; SETTING THE PLAYER NUMBER TO WHAT THE CLIENT RECKONS
Print"==================================="
Print "Client Number set to: "+ses\player_number
PokeByte ses\tcp_sendbank,3,ses\player_number
;Secondly we reply it kindly.
s=WriteBytes (ses\tcp_sendbank,ses\link,0,max_bank)
;;print "Succesfull sending "+s+" bytes of data"
packetssent= packetssent+1
ses\status=10 ; Well we cant wait for next coll packet to arive :D"
End Select
Next
ms=MilliSecs()-oldms
If ms>msmax Then msmax=ms
If ms<msmin Then msmin=ms
count=count+1
cmsmed=cmsmed+ms
msmed=cmsmed/count ; medium millisecs
tick=tick+1
If tick>=500 Then Print "Ticks: "+count+" MS="+ms+" MIN="+msmin+" MED="+msmed+" MAX="+msmax+ "Packets sent "+ packetssent : tick=0
If KeyHit(19) Then MSMIN=99999 : msmed=0 : count=0 : msmax=0 : packetssent=0 :cmsmed=0: ;print "Counter resets."
Delay 8 ; this gives cpu time to rest of OS in windows. as server is not so cpu intensive.
Wend
;---------------------------------------------------------------------
; functions
;---------------------------------------------------------------------
Function fn_delete_file(numberin)
;print "Deleting File: "+numberin
;del_file_name$="file_dir/"+numberin+".ini"
del_file_name$="./"+numberin+".ini"
DeleteFile (del_file_name$)
;print "File Deleted"
End Function
Function fn_create_file(numberin)
BestName$="Mark"
file_name$(file_count)="./"+numberin+".ini"
;print file_name$(file_count)
writethis$=file_name$(file_count)
file_count=file_count+1
; Open a file to write to
fileout = WriteFile(writethis$)
WriteString( fileout, "new string:1" )
; Close the file
CloseFile( fileout )
End Function
;END WORMSERVER.bb
;=================================================================
[/codebox] |
Comments
None.
Code Archives Forum