Cleaned up message sending
This commit is contained in:
parent
d44a872cce
commit
3d84c13314
|
@ -22,8 +22,6 @@ class BattleNetHandler: ChannelInboundHandler {
|
||||||
|
|
||||||
private var state: BattleNetConnectionStatus = .disconnected(error: nil) {
|
private var state: BattleNetConnectionStatus = .disconnected(error: nil) {
|
||||||
didSet {
|
didSet {
|
||||||
print("[BNCS] Status changed from \(oldValue) to \(state).")
|
|
||||||
|
|
||||||
switch state {
|
switch state {
|
||||||
case .connecting:
|
case .connecting:
|
||||||
print("[BNCS] Connecting...")
|
print("[BNCS] Connecting...")
|
||||||
|
@ -98,6 +96,12 @@ class BattleNetHandler: ChannelInboundHandler {
|
||||||
|
|
||||||
/// MARK -
|
/// MARK -
|
||||||
|
|
||||||
|
func sendMessage(_ message: BncsMessage) {
|
||||||
|
var buffer = netChannel.allocator.buffer(capacity: message.data.count)
|
||||||
|
buffer.write(bytes: message.data.arrayOfBytes())
|
||||||
|
netChannel.writeAndFlush(buffer, promise: nil)
|
||||||
|
}
|
||||||
|
|
||||||
func monitorDefunctValues<T: Comparable>(value: T, expected: T, description: String) {
|
func monitorDefunctValues<T: Comparable>(value: T, expected: T, description: String) {
|
||||||
if value != expected {
|
if value != expected {
|
||||||
print("[BNCS] Unexpected value in defunct field. Description: \(description), value: \(value).")
|
print("[BNCS] Unexpected value in defunct field. Description: \(description), value: \(value).")
|
||||||
|
@ -123,8 +127,7 @@ class BattleNetHandler: ChannelInboundHandler {
|
||||||
composer.write(0 as UInt32)
|
composer.write(0 as UInt32)
|
||||||
composer.write("USA")
|
composer.write("USA")
|
||||||
composer.write("United States")
|
composer.write("United States")
|
||||||
let authInfoMessage = composer.build(messageIdentifier: BncsMessageIdentifier.AuthInfo)
|
sendMessage(composer.build(messageIdentifier: BncsMessageIdentifier.AuthInfo))
|
||||||
let _ = authInfoMessage.writeToChannel(netChannel)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func processMessage(_ message: BncsMessage) {
|
func processMessage(_ message: BncsMessage) {
|
||||||
|
@ -132,15 +135,13 @@ class BattleNetHandler: ChannelInboundHandler {
|
||||||
|
|
||||||
switch consumer.message.identifier {
|
switch consumer.message.identifier {
|
||||||
case .Null:
|
case .Null:
|
||||||
let _ = BncsMessageComposer().build(messageIdentifier: .Null).writeToChannel(netChannel)
|
sendMessage(BncsMessageComposer().build(messageIdentifier: .Null))
|
||||||
print("[BNCS] Keep-alive.")
|
|
||||||
|
|
||||||
case .Ping:
|
case .Ping:
|
||||||
let cookie = consumer.readUInt32()
|
let cookie = consumer.readUInt32()
|
||||||
var composer = BncsMessageComposer()
|
var composer = BncsMessageComposer()
|
||||||
composer.write(cookie)
|
composer.write(cookie)
|
||||||
let _ = composer.build(messageIdentifier: .Ping).writeToChannel(netChannel)
|
sendMessage(composer.build(messageIdentifier: .Ping))
|
||||||
print("[BNCS] Ping.")
|
|
||||||
|
|
||||||
case .AuthInfo:
|
case .AuthInfo:
|
||||||
print("[BNCS] Received auth challenge.")
|
print("[BNCS] Received auth challenge.")
|
||||||
|
@ -172,8 +173,7 @@ class BattleNetHandler: ChannelInboundHandler {
|
||||||
composer.write(checkRevisionResults.info)
|
composer.write(checkRevisionResults.info)
|
||||||
composer.write("SwiftBot")
|
composer.write("SwiftBot")
|
||||||
print("[BNCS] Sending auth check...")
|
print("[BNCS] Sending auth check...")
|
||||||
let authCheckMessage = composer.build(messageIdentifier: BncsMessageIdentifier.AuthCheck)
|
sendMessage(composer.build(messageIdentifier: BncsMessageIdentifier.AuthCheck))
|
||||||
let _ = authCheckMessage.writeToChannel(netChannel)
|
|
||||||
} catch (let error) {
|
} catch (let error) {
|
||||||
print("Error calculating CheckRevision(): \(error)")
|
print("Error calculating CheckRevision(): \(error)")
|
||||||
}
|
}
|
||||||
|
@ -191,8 +191,7 @@ class BattleNetHandler: ChannelInboundHandler {
|
||||||
composer.write(serverToken)
|
composer.write(serverToken)
|
||||||
composer.write(passwordHash)
|
composer.write(passwordHash)
|
||||||
composer.write(BotConfig.username) // username
|
composer.write(BotConfig.username) // username
|
||||||
let logonResponseMessage = composer.build(messageIdentifier: BncsMessageIdentifier.LogonResponse2)
|
sendMessage(composer.build(messageIdentifier: BncsMessageIdentifier.LogonResponse2))
|
||||||
let _ = logonResponseMessage.writeToChannel(netChannel)
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
print("[BNCS] Auth check failed. \(authCheckResult)")
|
print("[BNCS] Auth check failed. \(authCheckResult)")
|
||||||
|
@ -218,16 +217,16 @@ class BattleNetHandler: ChannelInboundHandler {
|
||||||
var enterChatComposer = BncsMessageComposer()
|
var enterChatComposer = BncsMessageComposer()
|
||||||
enterChatComposer.write("")
|
enterChatComposer.write("")
|
||||||
enterChatComposer.write("")
|
enterChatComposer.write("")
|
||||||
let _ = enterChatComposer.build(messageIdentifier: .EnterChat).writeToChannel(netChannel)
|
sendMessage(enterChatComposer.build(messageIdentifier: .EnterChat))
|
||||||
|
|
||||||
var joinChannelComposer = BncsMessageComposer()
|
var joinChannelComposer = BncsMessageComposer()
|
||||||
joinChannelComposer.write(1 as UInt32) // first join -- contrary to bnet docs, 1 is used by D2 as well
|
joinChannelComposer.write(1 as UInt32) // first join -- contrary to bnet docs, 1 is used by D2 as well
|
||||||
joinChannelComposer.write("Diablo II") // channel name
|
joinChannelComposer.write("Diablo II") // channel name
|
||||||
let _ = joinChannelComposer.build(messageIdentifier: .JoinChannel).writeToChannel(netChannel)
|
sendMessage(joinChannelComposer.build(messageIdentifier: .JoinChannel))
|
||||||
|
|
||||||
var chatCommandComposer = BncsMessageComposer()
|
var chatCommandComposer = BncsMessageComposer()
|
||||||
chatCommandComposer.write("/join \(BotConfig.homeChannel)")
|
chatCommandComposer.write("/join \(BotConfig.homeChannel)")
|
||||||
let _ = chatCommandComposer.build(messageIdentifier: .ChatCommand).writeToChannel(netChannel)
|
sendMessage(chatCommandComposer.build(messageIdentifier: .ChatCommand))
|
||||||
|
|
||||||
default:
|
default:
|
||||||
print("[BNCS] Logon failed: \(status).")
|
print("[BNCS] Logon failed: \(status).")
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
//
|
|
||||||
// MessageExtension.swift
|
|
||||||
// SwiftBncsLibPackageDescription
|
|
||||||
//
|
|
||||||
// Created by William LaFrance on 3/9/18.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SwiftBncsLib
|
|
||||||
import NIO
|
|
||||||
|
|
||||||
public extension SwiftBncsLib.Message {
|
|
||||||
|
|
||||||
public func writeToChannel(_ channel: Channel) -> EventLoopFuture<Void> {
|
|
||||||
var buffer = channel.allocator.buffer(capacity: self.data.count)
|
|
||||||
buffer.write(bytes: self.data.arrayOfBytes())
|
|
||||||
return channel.writeAndFlush(buffer)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue