Commit 0aa6c32e authored by shigemi miura's avatar shigemi miura

チャット送信エラー時にダイアログを表示

parent c8ea3a7d
...@@ -10,7 +10,10 @@ import SwiftUI ...@@ -10,7 +10,10 @@ import SwiftUI
struct ChatInputView: View { struct ChatInputView: View {
@EnvironmentObject private var sceneDelegate: SceneDelegate @EnvironmentObject private var sceneDelegate: SceneDelegate
@ObservedObject var sessionUploadImage: SessionUploadImage = SessionUploadImage() @ObservedObject var sessionUploadImage: SessionUploadImage = SessionUploadImage()
@ObservedObject var msg = SharingData.message
@State var inputText = "" @State var inputText = ""
@State private var isChatAlert: Bool = false
@State private var isPhotAlert: Bool = false
@State private var selectionValue = 3 @State private var selectionValue = 3
@State var isCamera: Bool = false @State var isCamera: Bool = false
@State var isPhoto: Bool = false @State var isPhoto: Bool = false
...@@ -85,10 +88,7 @@ struct ChatInputView: View { ...@@ -85,10 +88,7 @@ struct ChatInputView: View {
.padding(.leading, 20) .padding(.leading, 20)
Button{ Button{
isKeyboard = false sendChatMessage(message: inputText)
let signalRService = SignalR()
signalRService.chatMessage(message: inputText)
inputText = ""
} label: { } label: {
Image("send") Image("send")
.resizable() .resizable()
...@@ -128,8 +128,21 @@ struct ChatInputView: View { ...@@ -128,8 +128,21 @@ struct ChatInputView: View {
} }
} }
.frame(maxHeight: 55) .frame(maxHeight: 55)
.alert("Error", isPresented: $isChatAlert) {
Button("OK") {}
} message: {
Text("The message could not be sent.")
}
.alert("Error", isPresented: $isPhotAlert) {
Button("OK") {}
} message: {
Text("The Image could not be sent.")
}
} }
/**
* イメージレスポンス
*/
func responseUploadImage(result: Result<Data, APIError>) { func responseUploadImage(result: Result<Data, APIError>) {
print(debug: "calld") print(debug: "calld")
switch result { switch result {
...@@ -139,9 +152,32 @@ struct ChatInputView: View { ...@@ -139,9 +152,32 @@ struct ChatInputView: View {
case .failure(let errorCode): case .failure(let errorCode):
print(debug: errorCode) print(debug: errorCode)
isPhotAlert = true
break break
} }
} }
/**
* チャット送信
*/
func sendChatMessage(message: String) {
let signalRService = SignalR()
signalRService.chatMessage(message: inputText, completion: responseChatMessage)
}
/**
* チャットレスポンス
*/
func responseChatMessage(error: Error?) {
if let e = error {
print(debug: "Error:\(e)")
msg.messages.removeLast() //最後に追加したメッセージを削除
isChatAlert = true
} else {
isKeyboard = false
inputText = ""
}
}
} }
#Preview { #Preview {
......
...@@ -215,7 +215,7 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M ...@@ -215,7 +215,7 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M
class SignalR: NSObject { class SignalR: NSObject {
@ObservedObject var msg = SharingData.message @ObservedObject var msg = SharingData.message
func chatMessage(message: String) { func chatMessage(message: String, completion: @escaping (_ error: Error?) -> Void) {
var request = ReqMessage(shipId: Preferences.shipId, messageId: UUID().uuidString.lowercased()) var request = ReqMessage(shipId: Preferences.shipId, messageId: UUID().uuidString.lowercased())
request.type = 0 //0:テキスト, 1:スタンプ request.type = 0 //0:テキスト, 1:スタンプ
request.time = DateTextLib.Date2ISO8601Text(Date()) request.time = DateTextLib.Date2ISO8601Text(Date())
...@@ -226,13 +226,10 @@ class SignalR: NSObject { ...@@ -226,13 +226,10 @@ class SignalR: NSObject {
request.stampId = 0 //スタンプ番号 0:Fire~ request.stampId = 0 //スタンプ番号 0:Fire~
if message != "" { if message != "" {
connection!.invoke(method: "chatMessage", request) { error in connection!.invoke(method: "chatMessage", request, invocationDidComplete: completion)
if let e = error {
print(debug: "Error:\(e)") let ownMsg = ChatMessage(shipId: request.shipId, messageId: request.messageId, type: request.type, time: request.time, location: request.location, from: request.from, message: request.message, stampId: request.stampId, viewer: [])
} self.msg.messages.append(ownMsg)
let ownMsg = ChatMessage(shipId: request.shipId, messageId: request.messageId, type: request.type, time: request.time, location: request.location, from: request.from, message: request.message, stampId: request.stampId, viewer: [])
self.msg.messages.append(ownMsg)
}
} }
} }
......
...@@ -106,12 +106,15 @@ class ServerSession{ ...@@ -106,12 +106,15 @@ class ServerSession{
do{ do{
if error != nil{ if error != nil{
// print(debug: "clientError: \(error)") // print(debug: "clientError: \(error)")
completion(.failure(.unknown))
throw APIError.clientError throw APIError.clientError
} }
guard let indata = data, let inresponse = response as? HTTPURLResponse else { guard let indata = data, let inresponse = response as? HTTPURLResponse else {
completion(.failure(.unknown))
throw APIError.responseError throw APIError.responseError
} }
if inresponse.statusCode != 200 { if inresponse.statusCode != 200 {
completion(.failure(.unknown))
// let statusCode = inresponse.statusCode // let statusCode = inresponse.statusCode
// print(debug: "serverError: \(statusCode)") // print(debug: "serverError: \(statusCode)")
throw APIError.serverError throw APIError.serverError
...@@ -151,12 +154,16 @@ class ServerSession{ ...@@ -151,12 +154,16 @@ class ServerSession{
do{ do{
if error != nil{ if error != nil{
// print(debug: "clientError: \(error)") // print(debug: "clientError: \(error)")
completion(.failure(.unknown))
throw APIError.clientError throw APIError.clientError
} }
guard let indata = data, let inresponse = response as? HTTPURLResponse else { guard let indata = data, let inresponse = response as? HTTPURLResponse else {
completion(.failure(.unknown))
throw APIError.responseError throw APIError.responseError
} }
if inresponse.statusCode != 200 { if inresponse.statusCode != 200 {
completion(.failure(.unknown))
// let statusCode = inresponse.statusCode // let statusCode = inresponse.statusCode
// print(debug: "serverError: \(statusCode)") // print(debug: "serverError: \(statusCode)")
throw APIError.serverError throw APIError.serverError
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment