const HTML_EDIT = 800
const MESSAGE_EDIT = 801
int datasocket=-1
int ncsStatus
int l,t,w,h
window win

openwindow win,0,0,600,300,@SIZE|@MINBOX|@MAXBOX,0,"Network Client Example",&handler
GetClientSize win,l,t,w,h
Control win,@EDIT,"",0,0,w,h/2,@CTEDITMULTI|@CTEDITRO|@HSCROLL|@VSCROLL,HTML_EDIT
Control win,@EDIT,"",0,h/2,w,h/2,@CTEDITMULTI|@CTEDITRO|@HSCROLL|@VSCROLL,MESSAGE_EDIT
'initialize the client server library
ncsStatus = NCSInit(1,0)
if ncsStatus<0
	AppendEdit(win,MESSAGE_EDIT,"Error initializing Client Server library",TRUE)
	AppendEdit(win,MESSAGE_EDIT,NCSGetErrorText(),TRUE)
else
	'Attempt to connect to server
	AppendEdit(win,MESSAGE_EDIT,"Client Server Library initialized",TRUE)
	ncsStatus = NCSConnectToServer("www.ionicwind.com",80)
	if ncsStatus < 0
		AppendEdit(win,MESSAGE_EDIT,"Error connecting to server",TRUE)
		AppendEdit(win,MESSAGE_EDIT,NCSGetErrorText(),TRUE)
	else
		'Register a message to be sent when data is read to be retrieved
		datasocket = ncsStatus
		AppendEdit(win,MESSAGE_EDIT,"Connected to server, Socket ="+str$(datasocket),TRUE)
		ncsStatus=NCSOnDataMessage(win.hWnd, datasocket, 7000)
		if ncsStatus < 0
			AppendEdit(win,MESSAGE_EDIT,"NCSOnDataMessage error",TRUE)
			AppendEdit(win,MESSAGE_EDIT,NCSGetErrorText(),TRUE)
		endif
	endif
endif
if datasocket > -1
	'send server a command
	AppendEdit(win,MESSAGE_EDIT,"Sending GET command",TRUE)
	string toSend = "GET / HTTP/1.1\nHost:www.ionicwind.com\n\n"
	NCSSendData(datasocket,toSend,len(toSend)+1)
endif
waituntil IsWindowClosed(win)
'cleanup
if datasocket > -1
	NCSCloseSocket(datasocket)
endif
NCSFree()
end

istring buffer[10000]

sub handler
	select @message
		case @idcreate
			centerwindow win
		case @idclosewindow
			closewindow win
		case @idsize
			GetClientSize win,l,t,w,h
			SetSize win,0,0,w,h/2,HTML_EDIT
			SetSize win,0,h/2,w,h/2,MESSAGE_EDIT
		case 7000
			'data from server
			ncsStatus = NCSReadData(datasocket,buffer,9999,500)
			if ncsStatus > 0
				AppendEdit(win,MESSAGE_EDIT,"Received"+str$(ncsStatus)+" bytes",TRUE) 
				buffer[ncsStatus]=0
				AppendEdit(win,HTML_EDIT,buffer,FALSE)
				'Arm the data message for further data.
				ncsStatus=NCSOnDataMessage(win.hWnd, datasocket, 7000)
			elseif ncsStatus < 0
				AppendEdit(win,MESSAGE_EDIT,"ERROR :" + str$(ncsStatus),TRUE)
			endif
	endselect
endsub

'subroutine to easily append text in an edit control.
CONST WM_GETTEXTLENGTH = 0xE
Sub AppendEdit(window win,int id,string text,int addNL)
	int _textlen:_textlen =SendMessage(win, WM_GETTEXTLENGTH,0,0,id)
	ControlCmd win, id, @EDSETSELECTION, _textlen, _textlen
	if(addNL)
		ControlCmd win, id, @EDREPLACESEL, text + "\n"
	else
		ControlCmd win, id, @EDREPLACESEL, text
	endif
Endsub
