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