procedure main(av) port := 4500 Users := [] Sockets := table() #ripped off from Dr. J & Mike if av[i := 1 to *av] == ("-port" | "-p") then port := integer(av[i+1]) #open up network to listen for connections net := open(":" || port, "nl") | stop("Open failed: ", sys_errstr(&errno)) write("Virtual Classroom Peer 1.0 Started on port ", port) repeat{ #Check to see which socket is ready for reading if *Users = 0 then L := select(net,0) else L := select(net, Users, 0) #Make new connection if listener ready if !L === net then{ #Get User ID write(net,"Who are you?") uid:= read(net) uid := trim(uid, '\r\n') #Put user in socket table Sockets[net] := uid #Put user socket in User List put(Users,net) write(net, "Connection made") #create net listener socket net := open(":" || port, "nl") | stop("Open failed: ", sys_errstr(&errno)) write("There are ", *Users, " online\n", "Sockets: ", *Sockets) } #Read from Users ready to write else{ every i := 1 to *L do { if buffer := read(L[i]) then { if *Users == 1 then write(L[i], "No other users connected to talk to.") else{ sender := Sockets[L[i]] write(sender) newbuf := sender || ": " || buffer every x := 1 to *Users do { if not (L[i] === Users[x]) then{ write(Users[x],newbuf) } } } } else { close(L[i]) Xuser := Sockets[L[i]] delete(Sockets, L[i]) every n := 1 to *Users do { if L[i] === Users[n] then{ delete(Users, n) break } } write("Deleted user ", Xuser, "\nNumber Users: ", *Users, "::" , *Sockets) } } } } close(net) end