From sven-netrek-dev at sven.de Mon Apr 1 13:37:39 2019 From: sven-netrek-dev at sven.de (Sven Neuhaus) Date: Mon, 1 Apr 2019 20:37:39 +0200 Subject: [netrek-dev] Mac Swift Netrek client v0.5 now available In-Reply-To: References: Message-ID: <2787a20c-6c4e-5d12-7500-f49213127a31@sven.de> Congratulations on the release! What's the reason for the Mojave OS requirement? I still have High Sierra on my Macbook. -Sven From darrellroot at mac.com Thu Apr 4 12:21:03 2019 From: darrellroot at mac.com (Darrell Root) Date: Thu, 4 Apr 2019 10:21:03 -0700 Subject: [netrek-dev] Netrek now on MacOS App Store, source code now public on GitHub Message-ID: <13315098-4E7B-4AE7-AEC5-0CB2DB7581C1@mac.com> netrek-dev, Success! Netrek passed app review and is now on the MacOS App Store (screenshot at bottom). This is a free app. If you ran an alpha release, I suggest deleting it before downloading from the App store. Otherwise the app store will install the 1.0 release in your alpha release location, as opposed to /Applications. App store version 1.0 adds full controls in the strategic map window, hints on the welcome screen, a medium-sized help/documentation/credits book, convenient “mayday” and “escort me” buttons, and a tip jar. I’d appreciate people downloading it and (if you like it) positive reviews in the app store. I’m hoping that will attract new players. As promised, I’ve made the source code publicly available at https://github.com/darrellroot/SwiftNetrek I chose the MIT license, which is functionally similar to “copyright.h” and “copyright2.h”, but is a “standard license”. I welcome pull requests (but will review them of course). I’m still having issues with the “preferred team”. I thank Stas for his data and debugging suggestions but team selection is not working as expected. After a “Netrek development break” in April I will come back and figure that out. I’ll also work on “position extrapolation” to increase frame rate after my break. Netrek requires MacOS 10.14 Mojave. Sven asked: > What's the reason for the Mojave OS requirement? Rather than the classic BSD sockets API (socket/connect/bind/listen/accept), my Netrek client uses the new Network framework API from Apple. Source code at https://github.com/darrellroot/SwiftNetrek/blob/master/Netrek/Communication/TcpReader.swift The only problem with this API is it requires Mojave. It’s a real cool API, and helps prevent programmer mistakes from people like me. Excerpts below. I believe it gives me “free” IPv6 support if the hostname returns an AAAA address (I haven’t checked to see if the netrek vanilla server supports IPv6—I don’t see any netrek servers with AAAA DNS records). FYI it looks like IPv4 is supposed to be deprecated on 2/1/2030. #ipv4flagday // TcpReader partial excerpts only see https://github.com/darrellroot/SwiftNetrek/blob/master/Netrek/Communication/TcpReader.swift class TcpReader { init?(hostname: String, port: Int, delegate: NetworkDelegate) { let serverEndpoint = NWEndpoint.Host(hostname) guard let portEndpoint = NWEndpoint.Port(rawValue: port) else { return nil } connection = NWConnection(host: serverEndpoint, port: portEndpoint, using: .tcp) connection.stateUpdateHandler = { [weak self] (newState) in switch newState { case .ready: debugPrint("TcpReader.ready to send") self?.appDelegate.newGameState(.serverConnected) self?.receive() case .failed(let error): debugPrint("TcpReader.client failed with error \(error)") self?.appDelegate.newGameState(.noServerSelected) case .setup: debugPrint("TcpReader.setup") case .waiting(_): debugPrint("TcpReader.waiting") case .preparing: debugPrint("TcpReader.preparing") case .cancelled: debugPrint("TcpReader.cancelled") self?.appDelegate.newGameState(.noServerSelected) } } connection.start(queue: queue) } // the receive function waits asynchronously for new data and then uses the swift “closure” to process the data on a separate thread whenever it arrives. No select()! No testing for available data. func receive() { connection.receive(minimumIncompleteLength: 1, maximumLength: 16384) { (content, context, isComplete, error) in if let content = content { //debugPrint("content startIndex \(content.startIndex) endIndex \(content.endIndex)" ) self.delegate.gotData(data: content, from: self.hostname, port: self.port) } } func send(content: Data) { connection.send(content: content, completion: .contentProcessed({ (error) in if let error = error { print("send error: \(error)") } })) } And in the packet analyzer code after processing gotData: appDelegate.reader?.receive() Darrell -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Screen Shot 2019-04-04 at 9.43.13 AM.png Type: image/png Size: 377589 bytes Desc: not available URL: From chris.lukassen at gmail.com Thu Apr 4 13:27:48 2019 From: chris.lukassen at gmail.com (Chris Lukassen) Date: Thu, 4 Apr 2019 20:27:48 +0200 Subject: [netrek-dev] netrek-dev Digest, Vol 97, Issue 2 In-Reply-To: References: Message-ID: <7D28D441-5B70-461D-A707-A020BF727938@gmail.com> Awesome, MacTrek pulled about 70,000 downloads after being in the predecessor of the AppStore. I bet you can top that this very year, it may bring a huge amount of newbies to the game due to the exposure. Well done! Chris ---- Sent from my iPhone please excuse brevity and typos > On 4 Apr 2019, at 19:21, netrek-dev-request at us.netrek.org wrote: > > Send netrek-dev mailing list submissions to > netrek-dev at us.netrek.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://mailman.us.netrek.org/mailman/listinfo/netrek-dev > or, via email, send a message with subject or body 'help' to > netrek-dev-request at us.netrek.org > > You can reach the person managing the list at > netrek-dev-owner at us.netrek.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of netrek-dev digest..." > > > Today's Topics: > > 1. Netrek now on MacOS App Store, source code now public on > GitHub (Darrell Root) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Thu, 4 Apr 2019 10:21:03 -0700 > From: Darrell Root > To: Netrek Development Mailing List > Subject: [netrek-dev] Netrek now on MacOS App Store, source code now > public on GitHub > Message-ID: <13315098-4E7B-4AE7-AEC5-0CB2DB7581C1 at mac.com> > Content-Type: text/plain; charset="utf-8" > > netrek-dev, > > Success! > > Netrek passed app review and is now on the MacOS App Store (screenshot at bottom). This is a free app. > If you ran an alpha release, I suggest deleting it before downloading from the App store. Otherwise the app store will install the 1.0 release in your alpha release location, as opposed to /Applications. > > App store version 1.0 adds full controls in the strategic map window, hints on the welcome screen, a medium-sized help/documentation/credits book, convenient “mayday” and “escort me” buttons, and a tip jar. > > I’d appreciate people downloading it and (if you like it) positive reviews in the app store. I’m hoping that will attract new players. > > As promised, I’ve made the source code publicly available at https://github.com/darrellroot/SwiftNetrek > I chose the MIT license, which is functionally similar to “copyright.h” and “copyright2.h”, but is a “standard license”. I welcome pull requests (but will review them of course). > > I’m still having issues with the “preferred team”. I thank Stas for his data and debugging suggestions but team selection is not working as expected. After a “Netrek development break” in April I will come back and figure that out. I’ll also work on “position extrapolation” to increase frame rate after my break. > > Netrek requires MacOS 10.14 Mojave. Sven asked: >> What's the reason for the Mojave OS requirement? > > Rather than the classic BSD sockets API (socket/connect/bind/listen/accept), my Netrek client uses the new Network framework API from Apple. Source code at https://github.com/darrellroot/SwiftNetrek/blob/master/Netrek/Communication/TcpReader.swift The only problem with this API is it requires Mojave. > > It’s a real cool API, and helps prevent programmer mistakes from people like me. Excerpts below. I believe it gives me “free” IPv6 support if the hostname returns an AAAA address (I haven’t checked to see if the netrek vanilla server supports IPv6—I don’t see any netrek servers with AAAA DNS records). FYI it looks like IPv4 is supposed to be deprecated on 2/1/2030. #ipv4flagday > > // TcpReader partial excerpts only see https://github.com/darrellroot/SwiftNetrek/blob/master/Netrek/Communication/TcpReader.swift > class TcpReader { > init?(hostname: String, port: Int, delegate: NetworkDelegate) { > let serverEndpoint = NWEndpoint.Host(hostname) > guard let portEndpoint = NWEndpoint.Port(rawValue: port) else { return nil } > connection = NWConnection(host: serverEndpoint, port: portEndpoint, using: .tcp) > connection.stateUpdateHandler = { [weak self] (newState) in > switch newState { > case .ready: > debugPrint("TcpReader.ready to send") > self?.appDelegate.newGameState(.serverConnected) > self?.receive() > case .failed(let error): > debugPrint("TcpReader.client failed with error \(error)") > self?.appDelegate.newGameState(.noServerSelected) > case .setup: > debugPrint("TcpReader.setup") > case .waiting(_): > debugPrint("TcpReader.waiting") > case .preparing: > debugPrint("TcpReader.preparing") > case .cancelled: > debugPrint("TcpReader.cancelled") > self?.appDelegate.newGameState(.noServerSelected) > } > } > connection.start(queue: queue) > } > // the receive function waits asynchronously for new data and then uses the swift “closure” to process the data on a separate thread whenever it arrives. No select()! No testing for available data. > func receive() { > connection.receive(minimumIncompleteLength: 1, maximumLength: 16384) { (content, context, isComplete, error) in > if let content = content { > //debugPrint("content startIndex \(content.startIndex) endIndex \(content.endIndex)" ) > self.delegate.gotData(data: content, from: self.hostname, port: self.port) > } > } > func send(content: Data) { > connection.send(content: content, completion: .contentProcessed({ (error) in > if let error = error { > print("send error: \(error)") > } > })) > } > And in the packet analyzer code after processing gotData: > > appDelegate.reader?.receive() > Darrell > > > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: > -------------- next part -------------- > A non-text attachment was scrubbed... > Name: Screen Shot 2019-04-04 at 9.43.13 AM.png > Type: image/png > Size: 377589 bytes > Desc: not available > URL: > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > netrek-dev mailing list > netrek-dev at us.netrek.org > http://mailman.us.netrek.org/mailman/listinfo/netrek-dev > > > ------------------------------ > > End of netrek-dev Digest, Vol 97, Issue 2 > ***************************************** From netrek at gmail.com Thu Apr 4 19:38:45 2019 From: netrek at gmail.com (Zachary Uram) Date: Thu, 4 Apr 2019 20:38:45 -0400 Subject: [netrek-dev] netrek-dev Digest, Vol 97, Issue 2 In-Reply-To: <7D28D441-5B70-461D-A707-A020BF727938@gmail.com> References: <7D28D441-5B70-461D-A707-A020BF727938@gmail.com> Message-ID: Any chance of an iOS client for iPhones? I would love to help in testing! Zach On Thu, Apr 4, 2019 at 2:28 PM Chris Lukassen wrote: > Awesome, MacTrek pulled about 70,000 downloads after being in the > predecessor of the AppStore. I bet you can top that this very year, it may > bring a huge amount of newbies to the game due to the exposure. Well done! > > Chris > > ---- > Sent from my iPhone please excuse brevity and typos > > > On 4 Apr 2019, at 19:21, netrek-dev-request at us.netrek.org wrote: > > > > Send netrek-dev mailing list submissions to > > netrek-dev at us.netrek.org > > > > To subscribe or unsubscribe via the World Wide Web, visit > > http://mailman.us.netrek.org/mailman/listinfo/netrek-dev > > or, via email, send a message with subject or body 'help' to > > netrek-dev-request at us.netrek.org > > > > You can reach the person managing the list at > > netrek-dev-owner at us.netrek.org > > > > When replying, please edit your Subject line so it is more specific > > than "Re: Contents of netrek-dev digest..." > > > > > > Today's Topics: > > > > 1. Netrek now on MacOS App Store, source code now public on > > GitHub (Darrell Root) > > > > > > ---------------------------------------------------------------------- > > > > Message: 1 > > Date: Thu, 4 Apr 2019 10:21:03 -0700 > > From: Darrell Root > > To: Netrek Development Mailing List > > Subject: [netrek-dev] Netrek now on MacOS App Store, source code now > > public on GitHub > > Message-ID: <13315098-4E7B-4AE7-AEC5-0CB2DB7581C1 at mac.com> > > Content-Type: text/plain; charset="utf-8" > > > > netrek-dev, > > > > Success! > > > > Netrek passed app review and is now on the MacOS App Store (screenshot > at bottom). This is a free app. > > If you ran an alpha release, I suggest deleting it before downloading > from the App store. Otherwise the app store will install the 1.0 release > in your alpha release location, as opposed to /Applications. > > > > App store version 1.0 adds full controls in the strategic map window, > hints on the welcome screen, a medium-sized help/documentation/credits > book, convenient “mayday” and “escort me” buttons, and a tip jar. > > > > I’d appreciate people downloading it and (if you like it) positive > reviews in the app store. I’m hoping that will attract new players. > > > > As promised, I’ve made the source code publicly available at > https://github.com/darrellroot/SwiftNetrek > > I chose the MIT license, which is functionally similar to “copyright.h” > and “copyright2.h”, but is a “standard license”. I welcome pull requests > (but will review them of course). > > > > I’m still having issues with the “preferred team”. I thank Stas for his > data and debugging suggestions but team selection is not working as > expected. After a “Netrek development break” in April I will come back and > figure that out. I’ll also work on “position extrapolation” to increase > frame rate after my break. > > > > Netrek requires MacOS 10.14 Mojave. Sven asked: > >> What's the reason for the Mojave OS requirement? > > > > Rather than the classic BSD sockets API > (socket/connect/bind/listen/accept), my Netrek client uses the new Network > framework API from Apple. Source code at > https://github.com/darrellroot/SwiftNetrek/blob/master/Netrek/Communication/TcpReader.swift > The only problem with this API is it requires Mojave. > > > > It’s a real cool API, and helps prevent programmer mistakes from people > like me. Excerpts below. I believe it gives me “free” IPv6 support if the > hostname returns an AAAA address (I haven’t checked to see if the netrek > vanilla server supports IPv6—I don’t see any netrek servers with AAAA DNS > records). FYI it looks like IPv4 is supposed to be deprecated on 2/1/2030. > #ipv4flagday > > > > // TcpReader partial excerpts only see > https://github.com/darrellroot/SwiftNetrek/blob/master/Netrek/Communication/TcpReader.swift > > class TcpReader { > > init?(hostname: String, port: Int, delegate: NetworkDelegate) { > > let serverEndpoint = NWEndpoint.Host(hostname) > > guard let portEndpoint = NWEndpoint.Port(rawValue: port) else { > return nil } > > connection = NWConnection(host: serverEndpoint, port: > portEndpoint, using: .tcp) > > connection.stateUpdateHandler = { [weak self] (newState) in > > switch newState { > > case .ready: > > debugPrint("TcpReader.ready to send") > > self?.appDelegate.newGameState(.serverConnected) > > self?.receive() > > case .failed(let error): > > debugPrint("TcpReader.client failed with error \(error)") > > self?.appDelegate.newGameState(.noServerSelected) > > case .setup: > > debugPrint("TcpReader.setup") > > case .waiting(_): > > debugPrint("TcpReader.waiting") > > case .preparing: > > debugPrint("TcpReader.preparing") > > case .cancelled: > > debugPrint("TcpReader.cancelled") > > self?.appDelegate.newGameState(.noServerSelected) > > } > > } > > connection.start(queue: queue) > > } > > // the receive function waits asynchronously for new data and then uses > the swift “closure” to process the data on a separate thread whenever it > arrives. No select()! No testing for available data. > > func receive() { > > connection.receive(minimumIncompleteLength: 1, maximumLength: > 16384) { (content, context, isComplete, error) in > > if let content = content { > > //debugPrint("content startIndex \(content.startIndex) > endIndex \(content.endIndex)" ) > > self.delegate.gotData(data: content, from: self.hostname, > port: self.port) > > } > > } > > func send(content: Data) { > > connection.send(content: content, completion: .contentProcessed({ > (error) in > > if let error = error { > > print("send error: \(error)") > > } > > })) > > } > > And in the packet analyzer code after processing gotData: > > > > appDelegate.reader?.receive() > > Darrell > > > > > > -------------- next part -------------- > > An HTML attachment was scrubbed... > > URL: < > http://mailman.us.netrek.org/pipermail/netrek-dev/attachments/20190404/fe764068/attachment.html > > > > -------------- next part -------------- > > A non-text attachment was scrubbed... > > Name: Screen Shot 2019-04-04 at 9.43.13 AM.png > > Type: image/png > > Size: 377589 bytes > > Desc: not available > > URL: < > http://mailman.us.netrek.org/pipermail/netrek-dev/attachments/20190404/fe764068/attachment.png > > > > > > ------------------------------ > > > > Subject: Digest Footer > > > > _______________________________________________ > > netrek-dev mailing list > > netrek-dev at us.netrek.org > > http://mailman.us.netrek.org/mailman/listinfo/netrek-dev > > > > > > ------------------------------ > > > > End of netrek-dev Digest, Vol 97, Issue 2 > > ***************************************** > _______________________________________________ > netrek-dev mailing list > netrek-dev at us.netrek.org > http://mailman.us.netrek.org/mailman/listinfo/netrek-dev > -- http://www.fidei.org -------------- next part -------------- An HTML attachment was scrubbed... URL: