Code archives/Networking/Snakes Client and Server

This code has been declared by its author to be Public Domain code.

Download source code

Snakes Client and Server by Blitzplotter2010
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