Skip to content

Commit

Permalink
Merge pull request #1 from lcandy2/main
Browse files Browse the repository at this point in the history
Using throw functions instead of fatalError for Server Start and Stop
  • Loading branch information
kejinlu authored Aug 10, 2023
2 parents d9f5620 + 4dcf540 commit 1c8a0c6
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 36 deletions.
29 changes: 28 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,36 @@ Then run `swift build` whenever you get prepared.

## Code

Starting the server:

```swift
let uploader = SwiftyUploader()
uploader.run()

DispatchQueue.global().async {
do {
try uploader.run()
} catch {
DispatchQueue.main.async {
print("Failed to start server: \(error)")
}
return
}
}
```

Stopping the server:

```swift
DispatchQueue.global().async {
do {
try uploader.stop()
} catch {
DispatchQueue.main.async {
print("Failed to stop server: \(error)")
}
return
}
}
```

If you need web page support for international languages, you need to add the following settings in the app's info.plist
Expand Down
29 changes: 28 additions & 1 deletion README.zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,36 @@ Then run `swift build` whenever you get prepared.

## 代码

启动服务器:

```swift
let uploader = SwiftyUploader()
uploader.run()

DispatchQueue.global().async {
do {
try uploader.run()
} catch {
DispatchQueue.main.async {
print("Failed to start server: \(error)")
}
return
}
}
```

停止服务器:

```swift
DispatchQueue.global().async {
do {
try uploader.stop()
} catch {
DispatchQueue.main.async {
print("Failed to stop server: \(error)")
}
return
}
}
```

如果你需要 web 界面支持自适应的国际化语言,需要在 app 的 info.plist中增加下面的设置
Expand Down
57 changes: 23 additions & 34 deletions Sources/SwiftyUploader/SwiftyUploader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,45 +11,34 @@ public class SwiftyUploader {

public init() {}

public func run() {
DispatchQueue.global(qos: .background).async {
if self.loopGroup == nil {
self.loopGroup = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
}
if let loopGroup = self.loopGroup {
let socketBootstrap = ServerBootstrap(group: loopGroup)
.serverChannelOption(ChannelOptions.backlog, value: 256)
.serverChannelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
.childChannelInitializer {
channel in
channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap {
channel.pipeline.addHandler(HTTPHandler())
}
public func run() throws {
if self.loopGroup == nil {
self.loopGroup = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
}
if let loopGroup = self.loopGroup {
let socketBootstrap = ServerBootstrap(group: loopGroup)
.serverChannelOption(ChannelOptions.backlog, value: 256)
.serverChannelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
.childChannelInitializer {
channel in
channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap {
channel.pipeline.addHandler(HTTPHandler())
}
.childChannelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
.childChannelOption(ChannelOptions.maxMessagesPerRead, value: 1)

do {
let serverChannel =
try socketBootstrap.bind(host: "0.0.0.0", port: 80)
.wait()
print("Server running on:", serverChannel.localAddress!)

try serverChannel.closeFuture.wait()
} catch {
fatalError("failed to start server: \(error)")
}
}
.childChannelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
.childChannelOption(ChannelOptions.maxMessagesPerRead, value: 1)

let serverChannel =
try socketBootstrap.bind(host: "0.0.0.0", port: 80)
.wait()
print("Server running on:", serverChannel.localAddress!)

try serverChannel.closeFuture.wait()
}
}

public func stop() {
do {
try self.loopGroup?.syncShutdownGracefully()
} catch {
print("Error shutting down \(error.localizedDescription)")
exit(0)
}
public func stop() throws {
try self.loopGroup?.syncShutdownGracefully()
print("Client connection closed")
}

Expand Down

0 comments on commit 1c8a0c6

Please sign in to comment.