Commit 3f39eeba authored by shigemi miura's avatar shigemi miura

Login通信ベース作成

Eca初期データ Cookie保存
parent cc2e8395
......@@ -56,6 +56,12 @@
02CE4DC82ADF97E8002E79BC /* View+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CE4DC72ADF97E8002E79BC /* View+Extensions.swift */; };
02CE4DCC2ADFA03F002E79BC /* SelectedTabModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CE4DCB2ADFA03F002E79BC /* SelectedTabModel.swift */; };
02CE4DDA2ADFBA72002E79BC /* MapRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CE4DD92ADFBA72002E79BC /* MapRepresentable.swift */; };
D52D213A2AEBAC0500324D58 /* HttpRequestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21392AEBAC0500324D58 /* HttpRequestType.swift */; };
D52D213F2AEBB7D700324D58 /* RegisteredEca.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */; };
D52D21412AEDE18F00324D58 /* EcaCoordinatesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */; };
D5AE351A2AEBA66A00059889 /* ReqLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AE35182AEBA66A00059889 /* ReqLogin.swift */; };
D5AE351B2AEBA66A00059889 /* ResLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AE35192AEBA66A00059889 /* ResLogin.swift */; };
D5AE351D2AEBA6FC00059889 /* SessionLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AE351C2AEBA6FC00059889 /* SessionLogin.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
......@@ -142,6 +148,12 @@
02CE4DCB2ADFA03F002E79BC /* SelectedTabModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedTabModel.swift; sourceTree = "<group>"; };
02CE4DCD2ADFB9FF002E79BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
02CE4DD92ADFBA72002E79BC /* MapRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapRepresentable.swift; sourceTree = "<group>"; };
D52D21392AEBAC0500324D58 /* HttpRequestType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HttpRequestType.swift; path = Sailassist/Http/HttpRequestType.swift; sourceTree = SOURCE_ROOT; };
D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RegisteredEca.swift; path = Sailassist/ECA/RegisteredEca.swift; sourceTree = SOURCE_ROOT; };
D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = EcaCoordinatesTable.swift; path = Sailassist/ECA/EcaCoordinatesTable.swift; sourceTree = SOURCE_ROOT; };
D5AE35182AEBA66A00059889 /* ReqLogin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ReqLogin.swift; path = Sailassist/Json/ReqLogin.swift; sourceTree = SOURCE_ROOT; };
D5AE35192AEBA66A00059889 /* ResLogin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ResLogin.swift; path = Sailassist/Json/ResLogin.swift; sourceTree = SOURCE_ROOT; };
D5AE351C2AEBA6FC00059889 /* SessionLogin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SessionLogin.swift; path = Sailassist/ServerSession/SessionLogin.swift; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
......@@ -198,6 +210,9 @@
020B98122AD8C3140029DE4C /* SailAssist */ = {
isa = PBXGroup;
children = (
D52D213B2AEBB78E00324D58 /* ECA */,
D52D21382AEBABE700324D58 /* Http */,
D5AE35172AEBA64800059889 /* Json */,
022789122AE602D800A87787 /* ServerSession */,
0227890A2AE22DFB00A87787 /* SharingData */,
02CE4DCD2ADFB9FF002E79BC /* Info.plist */,
......@@ -386,6 +401,7 @@
022789122AE602D800A87787 /* ServerSession */ = {
isa = PBXGroup;
children = (
D5AE351C2AEBA6FC00059889 /* SessionLogin.swift */,
02CD06922AE88970005F8D8F /* ServerSession.swift */,
02CD06942AE895F5005F8D8F /* APIError.swift */,
);
......@@ -428,6 +444,32 @@
path = Fremeworks;
sourceTree = "<group>";
};
D52D21382AEBABE700324D58 /* Http */ = {
isa = PBXGroup;
children = (
D52D21392AEBAC0500324D58 /* HttpRequestType.swift */,
);
path = Http;
sourceTree = "<group>";
};
D52D213B2AEBB78E00324D58 /* ECA */ = {
isa = PBXGroup;
children = (
D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */,
D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */,
);
path = ECA;
sourceTree = "<group>";
};
D5AE35172AEBA64800059889 /* Json */ = {
isa = PBXGroup;
children = (
D5AE35182AEBA66A00059889 /* ReqLogin.swift */,
D5AE35192AEBA66A00059889 /* ResLogin.swift */,
);
path = Json;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
......@@ -559,14 +601,18 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D52D21412AEDE18F00324D58 /* EcaCoordinatesTable.swift in Sources */,
02CD06912AE6536B005F8D8F /* LayerEnum.swift in Sources */,
020B98532AD919180029DE4C /* LoginTypeSelectView.swift in Sources */,
D52D213F2AEBB7D700324D58 /* RegisteredEca.swift in Sources */,
0227890E2AE245C300A87787 /* ECA.swift in Sources */,
02CD06952AE895F5005F8D8F /* APIError.swift in Sources */,
02CE4DC82ADF97E8002E79BC /* View+Extensions.swift in Sources */,
020B98412AD8C3810029DE4C /* LoginView.swift in Sources */,
D5AE351D2AEBA6FC00059889 /* SessionLogin.swift in Sources */,
020B98552AD924930029DE4C /* QrCodeScannerView.swift in Sources */,
02CE4D7F2ADE42A9002E79BC /* MenuContentView.swift in Sources */,
D5AE351B2AEBA66A00059889 /* ResLogin.swift in Sources */,
02CE4D832ADE672B002E79BC /* MapTaskView.swift in Sources */,
02CE4DCC2ADFA03F002E79BC /* SelectedTabModel.swift in Sources */,
020B98162AD8C3150029DE4C /* ContentView.swift in Sources */,
......@@ -582,7 +628,9 @@
02CD06932AE88970005F8D8F /* ServerSession.swift in Sources */,
020B98592AD92A4C0029DE4C /* MainTabView.swift in Sources */,
020B984F2AD9182D0029DE4C /* InputUserNameView.swift in Sources */,
D5AE351A2AEBA66A00059889 /* ReqLogin.swift in Sources */,
020B98512AD9189A0029DE4C /* InputIdPassWordView.swift in Sources */,
D52D213A2AEBAC0500324D58 /* HttpRequestType.swift in Sources */,
020B986E2ADD3E8D0029DE4C /* DateTextLib.swift in Sources */,
020B98672ADD15050029DE4C /* MenuView.swift in Sources */,
020B98572AD924F50029DE4C /* CameraPreview.swift in Sources */,
......@@ -756,7 +804,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Sailassist/Preview Content\"";
DEVELOPMENT_TEAM = 886VZM9928;
DEVELOPMENT_TEAM = D2DC7QNNJ8;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Sailassist/Info.plist;
......@@ -788,7 +836,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Sailassist/Preview Content\"";
DEVELOPMENT_TEAM = 886VZM9928;
DEVELOPMENT_TEAM = D2DC7QNNJ8;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Sailassist/Info.plist;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
//
// RegisteredEca.swift
// Sailassist
//
// Created by 三浦薫巳 on 2023/10/27.
//
import Foundation
import CoreLocation
class RegisteredEca {
var id: UInt32 = 0
var isEnable: Bool = false //ECA有効
var isRunning: Bool = false //ECA実行中
var name: String = "" //ECA名称
var swNotice: UInt32 = 6 //ECA通知[NM]
var swStart: UInt32 = 5 //ECA開始[NM]
var swFinish: UInt32 = 4 //ECA終了[NM]
var datetime: String = "" //時刻(UTC ISO8601準拠)
var color: String = "" //ライン色(ARGB)
var width: UInt32 = 1 //ライン幅
var points: [CLLocationCoordinate2D] = []
init?( ecaName: String ) {
self.name = ecaName
}
}
//
// HttpRequestType.swift
// Sailassist
//
// Created by 三浦薫巳 on 2023/10/27.
//
import Foundation
#if DEBUG
//MARK: デバッグサーバー用
enum HttpRequestType : String {
case RegisterLogin = "https://ssv-canary-web.azurewebsites.net/applogin"
}
#else
//MARK: 運用サーバー用
enum HttpRequestType : String {
case RegisterLogin = "https://ssv-canary-web.azurewebsites.net/applogin"
}
#endif
//
// ReqLogin.swift
// Sailassist
//
// Created by 三浦薫巳 on 2023/10/26.
//
import Foundation
struct ReqLogin : Codable {
var Id: String
var Password: String
init(Id: String, Password: String) {
self.Id = Id
self.Password = Password
}
}
//
// ResLogin.swift
// Sailassist
//
// Created by 三浦薫巳 on 2023/10/26.
//
import Foundation
struct ResLogin : Codable {
var Id: Int = 0
var Name: String = ""
var CanUseCmap: Bool = false
var CanCheckActiveRouteAlert: Bool = false
var CanCheckBamAlert: Bool = false
}
......@@ -38,12 +38,10 @@ struct InputIdPassWordView: View {
.padding(.trailing)
.foregroundColor(.white)
.background(.lineColor01)
.autocapitalization(.none)
.modifier(TextFieldModifier(text: $loginViewParam.shipId, inputType: .UserId))
}
Divider()
.frame(height: 1)
.background(Color(.white))
......@@ -75,6 +73,9 @@ struct InputIdPassWordView: View {
.frame(height: 40)
Button(action: {
let sessionLogin = SessionLogin.OnlyOne
let login = ReqLogin(Id: loginViewParam.shipId, Password: loginViewParam.password)
sessionLogin.RequestLogin(login)
loginViewParam.viewMode = .InputUserName
}, label: {
Text("Sign In")
......
......@@ -62,3 +62,16 @@ class PassThroughWindow: UIWindow{
return rootViewController?.view == view ? nil : view
}
}
// MARK: コメント出力を消す
func print(debug: Any = "", function: String = #function, file: String = #file, line: Int = #line) {
#if DEBUG
var filename: NSString = file as NSString
filename = filename.lastPathComponent as NSString
// Swift.print("File: \(filename), Line: \(line), Func: \(function) \n\(debug)")
let outstr = String( format: "APPDebug File: %@, Line: %d, Func: %@\n\(debug)", filename, line, function )
// Swift.print( outstr ) NSLog がある時は、両方に出るのでいらない
NSLog( outstr ) // デバッグコンソールにも出力
#endif
}
......@@ -8,7 +8,7 @@
import Foundation
class ServerSession{
// JSON 文字列に変換
func toJSON<T>(_ reqparam : T) -> Data! where T : Encodable {
let Jencoder = JSONEncoder()
......@@ -20,7 +20,7 @@ class ServerSession{
}
return postdata
}
// JSON 文字列から変換
func fromJSON<T>(resultData: Data, resltType : T.Type ) -> T! where T : Decodable {
do{
......@@ -32,21 +32,21 @@ class ServerSession{
return nil
}
}
func postJson(_ req_url : URL, _ postdata : Data, completion: @escaping ((Result<Data, APIError>)) -> Void){
var req = URLRequest(url: req_url)
req.httpMethod = "POST"
req.addValue("application/json", forHTTPHeaderField: "Content-Type")
req.httpBody = postdata
req.timeoutInterval = 20 // タイムアウト3秒 → Amedasでタイムアウトエラー20秒に変更
// サーバー送信
// サーバー送信
let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
session.dataTask(with: req, completionHandler: {(data, response, error ) in
session.finishTasksAndInvalidate()
do{
if let error = error{
let err = APIError.clientError
......@@ -58,6 +58,12 @@ class ServerSession{
if inresponse.statusCode != 200 {
throw APIError.serverError
}
//Cookieを保存
if let fields = inresponse.allHeaderFields as? [String: String], let url = inresponse.url {
for cookie in HTTPCookie.cookies(withResponseHeaderFields: fields, for: url) {
HTTPCookieStorage.shared.setCookie(cookie)
}
}
DispatchQueue.main.async {
completion(.success(indata))
}
......@@ -71,4 +77,16 @@ class ServerSession{
}
}).resume()
}
// HTTPCookieStorageに特定のCookieが保存されているかを調べる
func isCookieSet(name: String, url: URL) -> Bool {
if let cookies = HTTPCookieStorage.shared.cookies(for: url) {
for cookie in cookies {
if (cookie.name == name) {
return true
}
}
}
return false
}
}
//
// SessionLogin.swift
// Sailassist
//
// Created by 三浦薫巳 on 2023/10/26.
//
import WebKit
class SessionLogin : NSObject {
// シングルトン宣言
static let OnlyOne = SessionLogin()
private var serverSession = ServerSession()
override init() {
super.init()
}
private var Calling : Bool = false // 通信中
/**
* ログイン
* - Parameters:
* - login: ログイン情報
*/
func RequestLogin(_ login : ReqLogin) {
print(debug: "calld")
if Calling {
return
}
Calling = true
// リクエストURLの組み立て
let url_string : String = HttpRequestType.RegisterLogin.rawValue
guard let req_url = URL(string : url_string) else {
Calling = false
return
}
if let postdata = serverSession.toJSON(login) {
serverSession.postJson(req_url, postdata, completion: serverResponse)
}
else {
Calling = false
return
}
}
func serverResponse(result: Result<Data, APIError>) {
print(debug: "calld")
switch result {
case .success(let resultData):
let jsonstr = String(data: resultData, encoding: .utf8)!
if jsonstr == "Completed.\n\n" {
Calling = false
} else {
Calling = false
}
case .failure(let errorCode):
print(errorCode)
break
}
}
}
......@@ -4,10 +4,27 @@
//
// Created by Mamoru Sugita on 2023/10/20.
//
import Foundation
import CoreLocation
class SharingData{
class My{
static var location: CLLocationCoordinate2D? = nil
static var speedKnot: Double = 0.0
static var bearing: Double = 0.0 // 自船進行方向
static var compass: Double? = nil // 端末の方位
static func reset() {
location = nil
speedKnot = 0.0
bearing = 0.0
}
}
/**
* Eca
*/
class Eca {
static var area: Dictionary<String, RegisteredEca> = [:]
}
}
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