OK so I just moved the declaration of the map to the package itself which makes it universal...all working as expected. Thanks.
On Saturday, September 12, 2020 at 1:35:49 PM UTC+1 Andy Hall wrote: > So this works fine... > > func handleConnection(c net.Conn) { > // get user details > username := createUser(c, "Please enter you username (new users will be > created / existing users will be loaded): ") > // map username to connection > var m = make(map[string]net.Conn) > m[username] = c > n := len(m) > fmt.Println(strconv.Itoa(n)) > > But due to the concurrent nature of the function ( I can't have player 1 > blocking player 2 ) the map only ever has details of your own > connection...as seen from the output of len on the server... > > $ go run game-server.go 6666 > 1 > 1 > > I guess I need to handle this outside of a goroutine... > On Saturday, September 12, 2020 at 7:55:34 AM UTC+1 Andy Hall wrote: > >> I think this is exactly what I need to do...thanks very much. I'm looking >> forward to implementing it. >> >> On Saturday, September 12, 2020 at 5:43:09 AM UTC+1 Shulhan wrote: >> >>> >>> >>> Pada tanggal Sab, 12 Sep 2020 02.54, Andy Hall <andyjo...@gmail.com> >>> menulis: >>> >>>> if I have multiple clients connected to a tcp server and I wish to >>>> write back to specific connections I can record the net.Conn value and >>>> then >>>> use the Write method on it...but when using Println I get the following >>>> for >>>> two clients... >>>> >>>> &{{0xc000094000}} >>>> &{{0xc000094080}} >>>> >>>> which when testing with a simple write doesn't work... >>>> >>>> package main >>>> import "net" >>>> var c net.Conn = "&{{0xc000094000}}" >>>> func writeConn(c net.Conn) { >>>> c.Write([]byte(string("Hello\n"))) >>>> } >>>> func main() { >>>> writeConn(c) >>>> } >>>> >>>> ...and results in the following... >>>> >>>> cannot use "&{{0xc000094000}}" (type string) as type net.Conn in >>>> assignment >>>> >>>> clearly using Println to output the net.Conn is not a viable var to use >>>> so how could I do this ? I intend to record each users net.Conn in a >>>> database which can then be queried as required. >>>> >>>> any help would be most greatly appreciated. >>>> >>> >>> >>> Either I miss something or Go has different socket concept, but last >>> time I learn this is not how the network socket works in general. >>> >>> First, &{{0xc000094000}} is the address of a variable. You can't >>> convert an address from string back to variable, because that would be >>> security issue. Usually socket connection is signed integer, in C you can >>> assign integer value to variable let other process write into it. But in >>> Go, connection is an interface/structure. >>> >>> If you want to record each users, you have two options: >>> >>> 1) Let the user send unique ID (for example their user ID or email or >>> username) on first accept. >>> >>> 2) Get unique ID from connection IP address (beware that two or more >>> connection may come from the same IP address). >>> >>> You then must have a map that store unique ID as key and net.Conn as >>> value. So, if you want to send some value to specific user, you query the >>> map first and if exist then you can proceeds. >>> >>> I hope that helps. >>> >>>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/eff5d382-7bc5-4f2e-9752-a3c850318c0fn%40googlegroups.com.