麦位模块整理

This commit is contained in:
zu
2021-10-26 19:14:01 +08:00
parent 5d7d3efea9
commit 525d8384fd
69 changed files with 991 additions and 1502 deletions

View File

@@ -7,6 +7,9 @@
objects = {
/* Begin PBXBuildFile section */
180806D827293794001FD836 /* NSObject+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 180806D727293794001FD836 /* NSObject+MJExtension.m */; };
181D7F1B2726CE2A00B7C059 /* StageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 181D7F1A2726CE2A00B7C059 /* StageView.m */; };
181D7F212727D9DB00B7C059 /* SocialStageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 181D7F202727D9DB00B7C059 /* SocialStageView.m */; };
18486213271EA9DA005FC5DC /* RtcManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18486212271EA9DA005FC5DC /* RtcManager.m */; };
18486217271EAB8C005FC5DC /* BaseRtcImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 18486216271EAB8C005FC5DC /* BaseRtcImpl.m */; };
18486235271EB794005FC5DC /* AgoraRtcImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 18486234271EB794005FC5DC /* AgoraRtcImpl.m */; };
@@ -107,7 +110,7 @@
E81C27A226EF23490031E639 /* XPEnum.h in Sources */ = {isa = PBXBuildFile; fileRef = E81C27A126EF23370031E639 /* XPEnum.h */; };
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C27AA26EF2D920031E639 /* ThirdUserInfo.m */; };
E81C27AE26EF39AB0031E639 /* AppDelegate+ThirdConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = E81C27AD26EF39AB0031E639 /* AppDelegate+ThirdConfig.m */; };
E81D58822720082A003063FE /* XPRoomPositionItemSpeakingView.m in Sources */ = {isa = PBXBuildFile; fileRef = E81D58812720082A003063FE /* XPRoomPositionItemSpeakingView.m */; };
E81D58822720082A003063FE /* MicroWaveView.m in Sources */ = {isa = PBXBuildFile; fileRef = E81D58812720082A003063FE /* MicroWaveView.m */; };
E82109AD26F1C8A000FC3319 /* CountDownHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E82109AC26F1C8A000FC3319 /* CountDownHelper.m */; };
E82109B026F1D83500FC3319 /* LoginBindPhonePresent.m in Sources */ = {isa = PBXBuildFile; fileRef = E82109AF26F1D83500FC3319 /* LoginBindPhonePresent.m */; };
E824543526F57D6E00BE8163 /* XPLoginVerifBindPhoneViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E824543426F57D6E00BE8163 /* XPLoginVerifBindPhoneViewController.m */; };
@@ -139,11 +142,7 @@
E86596462701612D00846EBD /* UIImageView+Vague.m in Sources */ = {isa = PBXBuildFile; fileRef = E86596452701612D00846EBD /* UIImageView+Vague.m */; };
E86596512701A1C000846EBD /* StatisticsService.m in Sources */ = {isa = PBXBuildFile; fileRef = E86596502701A1C000846EBD /* StatisticsService.m */; };
E86596542701A55500846EBD /* StatisticsServiceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E86596532701A55500846EBD /* StatisticsServiceHelper.m */; };
E868070A271959DB0024F48F /* XPRoomPositionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8680709271959DB0024F48F /* XPRoomPositionView.m */; };
E868070F27195DD30024F48F /* XPRoomPositionLayoutImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = E868070E27195DD30024F48F /* XPRoomPositionLayoutImpl.m */; };
E868071327195E1A0024F48F /* XPRoomPositionDelegateImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = E868071227195E1A0024F48F /* XPRoomPositionDelegateImpl.m */; };
E8680718271967B00024F48F /* XPRoomPostionBaseItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8680717271967B00024F48F /* XPRoomPostionBaseItemView.m */; };
E868071B271969A50024F48F /* XCRoomPostionNickView.m in Sources */ = {isa = PBXBuildFile; fileRef = E868071A271969A50024F48F /* XCRoomPostionNickView.m */; };
E8680718271967B00024F48F /* MicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8680717271967B00024F48F /* MicroView.m */; };
E872308926E89BE000B90D4F /* LoginPhoneViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E872308826E89BE000B90D4F /* LoginPhoneViewController.m */; };
E872308D26E89DAA00B90D4F /* LoginInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = E872308C26E89DAA00B90D4F /* LoginInputView.m */; };
E872309326E8D31500B90D4F /* LoginVerifCodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = E872309226E8D31500B90D4F /* LoginVerifCodeView.m */; };
@@ -151,11 +150,8 @@
E874B8782721438E003954B9 /* XPImRoomImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B8772721438E003954B9 /* XPImRoomImpl.m */; };
E874B87B27214882003954B9 /* XPIMRoomInterface.h in Sources */ = {isa = PBXBuildFile; fileRef = E874B879272143AD003954B9 /* XPIMRoomInterface.h */; };
E874B87C27214888003954B9 /* XPIMRoomDelegate.h in Sources */ = {isa = PBXBuildFile; fileRef = E874B87A272143C7003954B9 /* XPIMRoomDelegate.h */; };
E874B880272158E7003954B9 /* XPIMRoomMicQueueImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B87F272158E7003954B9 /* XPIMRoomMicQueueImpl.m */; };
E874B88327215B06003954B9 /* XPIMRoomMicQueueInterface.h in Sources */ = {isa = PBXBuildFile; fileRef = E874B881272158FA003954B9 /* XPIMRoomMicQueueInterface.h */; };
E874B88427215B0E003954B9 /* XPIMRoomMicQueueDelegate.h in Sources */ = {isa = PBXBuildFile; fileRef = E874B8822721590D003954B9 /* XPIMRoomMicQueueDelegate.h */; };
E874B88827215D39003954B9 /* MicroModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88727215D39003954B9 /* MicroModel.m */; };
E874B88B27215EAF003954B9 /* MicroQueueItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88A27215EAF003954B9 /* MicroQueueItemModel.m */; };
E874B88827215D39003954B9 /* MicroStateModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88727215D39003954B9 /* MicroStateModel.m */; };
E874B88B27215EAF003954B9 /* MicroQueueModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88A27215EAF003954B9 /* MicroQueueModel.m */; };
E874B88F27216FFE003954B9 /* XPIMChatRoomMemberImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88E27216FFE003954B9 /* XPIMChatRoomMemberImpl.m */; };
E874B8912721712B003954B9 /* XPIMChatRoomMemberInterface.h in Sources */ = {isa = PBXBuildFile; fileRef = E874B890272170A6003954B9 /* XPIMChatRoomMemberInterface.h */; };
E874B89527217DA6003954B9 /* XPIMChatRoomMessageImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B89427217DA6003954B9 /* XPIMChatRoomMessageImpl.m */; };
@@ -181,7 +177,6 @@
E89DA66727006443008483C1 /* RechargeStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA66627006443008483C1 /* RechargeStorage.m */; };
E89DA67227008D59008483C1 /* WalletInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA67127008D59008483C1 /* WalletInfoModel.m */; };
E89DA67527009ACD008483C1 /* XPMineRechargeNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA67427009ACD008483C1 /* XPMineRechargeNavView.m */; };
E89DA67827009F16008483C1 /* NSObject+JSONString.m in Sources */ = {isa = PBXBuildFile; fileRef = E89DA67727009F16008483C1 /* NSObject+JSONString.m */; };
E8AC720D26F435F5007D6E91 /* UIImageView+LoadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */; };
E8AC721026F43955007D6E91 /* UIImageConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC720F26F43955007D6E91 /* UIImageConstant.m */; };
E8AC721326F46ADD007D6E91 /* XPMineSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AC721226F46ADD007D6E91 /* XPMineSettingViewController.m */; };
@@ -205,9 +200,7 @@
E8AEAEED27141AE20017FCE0 /* XPRoomBackContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AEAEEC27141AE20017FCE0 /* XPRoomBackContainerView.m */; };
E8AEAEF027141C430017FCE0 /* XPRoomMenuContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AEAEEF27141C430017FCE0 /* XPRoomMenuContainerView.m */; };
E8AEAEF327141C7C0017FCE0 /* XPRoomMessageContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AEAEF227141C7C0017FCE0 /* XPRoomMessageContainerView.m */; };
E8AEAEF627141C910017FCE0 /* XPRoomPositionContainView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AEAEF527141C910017FCE0 /* XPRoomPositionContainView.m */; };
E8AEAEF927141CA30017FCE0 /* XPRoomInfoContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8AEAEF827141CA30017FCE0 /* XPRoomInfoContainerView.m */; };
E8B825B726E9A7D8009E8E9F /* BaseObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B825B626E9A7D8009E8E9F /* BaseObject.m */; };
E8B825BF26E9E57D009E8E9F /* LoginTicketInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B825BE26E9E57D009E8E9F /* LoginTicketInfo.m */; };
E8B825C226EA00DF009E8E9F /* LoginVerifCodePresent.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B825C126EA00DF009E8E9F /* LoginVerifCodePresent.m */; };
E8B825C726EA0D9A009E8E9F /* LoginVerifCodeProtocol.h in Sources */ = {isa = PBXBuildFile; fileRef = E8B825C626EA0995009E8E9F /* LoginVerifCodeProtocol.h */; };
@@ -276,6 +269,14 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
180806D627293794001FD836 /* NSObject+MJExtension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJExtension.h"; sourceTree = "<group>"; };
180806D727293794001FD836 /* NSObject+MJExtension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJExtension.m"; sourceTree = "<group>"; };
180806DA27297269001FD836 /* MicroViewProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroViewProtocol.h; sourceTree = "<group>"; };
181D7F192726CE2A00B7C059 /* StageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StageView.h; sourceTree = "<group>"; };
181D7F1A2726CE2A00B7C059 /* StageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StageView.m; sourceTree = "<group>"; };
181D7F1F2727D9DB00B7C059 /* SocialStageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SocialStageView.h; sourceTree = "<group>"; };
181D7F202727D9DB00B7C059 /* SocialStageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SocialStageView.m; sourceTree = "<group>"; };
181D7F222727DB1E00B7C059 /* RoomDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoomDelegate.h; sourceTree = "<group>"; };
18486211271EA9DA005FC5DC /* RtcManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RtcManager.h; sourceTree = "<group>"; };
18486212271EA9DA005FC5DC /* RtcManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RtcManager.m; sourceTree = "<group>"; };
18486214271EAA03005FC5DC /* RtcDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RtcDelegate.h; sourceTree = "<group>"; };
@@ -448,8 +449,8 @@
E81C27AC26EF39AB0031E639 /* AppDelegate+ThirdConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AppDelegate+ThirdConfig.h"; sourceTree = "<group>"; };
E81C27AD26EF39AB0031E639 /* AppDelegate+ThirdConfig.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "AppDelegate+ThirdConfig.m"; sourceTree = "<group>"; };
E81D587B271FBC3B003063FE /* RtcInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RtcInterface.h; sourceTree = "<group>"; };
E81D58802720082A003063FE /* XPRoomPositionItemSpeakingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPositionItemSpeakingView.h; sourceTree = "<group>"; };
E81D58812720082A003063FE /* XPRoomPositionItemSpeakingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPositionItemSpeakingView.m; sourceTree = "<group>"; };
E81D58802720082A003063FE /* MicroWaveView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroWaveView.h; sourceTree = "<group>"; };
E81D58812720082A003063FE /* MicroWaveView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroWaveView.m; sourceTree = "<group>"; };
E82109AB26F1C8A000FC3319 /* CountDownHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CountDownHelper.h; sourceTree = "<group>"; };
E82109AC26F1C8A000FC3319 /* CountDownHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CountDownHelper.m; sourceTree = "<group>"; };
E82109AE26F1D83500FC3319 /* LoginBindPhonePresent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginBindPhonePresent.h; sourceTree = "<group>"; };
@@ -507,18 +508,8 @@
E86596502701A1C000846EBD /* StatisticsService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StatisticsService.m; sourceTree = "<group>"; };
E86596522701A55500846EBD /* StatisticsServiceHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StatisticsServiceHelper.h; sourceTree = "<group>"; };
E86596532701A55500846EBD /* StatisticsServiceHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StatisticsServiceHelper.m; sourceTree = "<group>"; };
E8680708271959DB0024F48F /* XPRoomPositionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPositionView.h; sourceTree = "<group>"; };
E8680709271959DB0024F48F /* XPRoomPositionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPositionView.m; sourceTree = "<group>"; };
E868070D27195DD30024F48F /* XPRoomPositionLayoutImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPositionLayoutImpl.h; sourceTree = "<group>"; };
E868070E27195DD30024F48F /* XPRoomPositionLayoutImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPositionLayoutImpl.m; sourceTree = "<group>"; };
E868071027195DF00024F48F /* XPRoomPositionLayoutProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPositionLayoutProtocol.h; sourceTree = "<group>"; };
E868071127195E1A0024F48F /* XPRoomPositionDelegateImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPositionDelegateImpl.h; sourceTree = "<group>"; };
E868071227195E1A0024F48F /* XPRoomPositionDelegateImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPositionDelegateImpl.m; sourceTree = "<group>"; };
E868071427195E340024F48F /* XPRoomPositionDataSourceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPositionDataSourceProtocol.h; sourceTree = "<group>"; };
E8680716271967B00024F48F /* XPRoomPostionBaseItemView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPostionBaseItemView.h; sourceTree = "<group>"; };
E8680717271967B00024F48F /* XPRoomPostionBaseItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPostionBaseItemView.m; sourceTree = "<group>"; };
E8680719271969A50024F48F /* XCRoomPostionNickView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XCRoomPostionNickView.h; sourceTree = "<group>"; };
E868071A271969A50024F48F /* XCRoomPostionNickView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XCRoomPostionNickView.m; sourceTree = "<group>"; };
E8680716271967B00024F48F /* MicroView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroView.h; sourceTree = "<group>"; };
E8680717271967B00024F48F /* MicroView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroView.m; sourceTree = "<group>"; };
E872308726E89BE000B90D4F /* LoginPhoneViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginPhoneViewController.h; sourceTree = "<group>"; };
E872308826E89BE000B90D4F /* LoginPhoneViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginPhoneViewController.m; sourceTree = "<group>"; };
E872308B26E89DAA00B90D4F /* LoginInputView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginInputView.h; sourceTree = "<group>"; };
@@ -531,14 +522,10 @@
E874B8772721438E003954B9 /* XPImRoomImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPImRoomImpl.m; sourceTree = "<group>"; };
E874B879272143AD003954B9 /* XPIMRoomInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIMRoomInterface.h; sourceTree = "<group>"; };
E874B87A272143C7003954B9 /* XPIMRoomDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIMRoomDelegate.h; sourceTree = "<group>"; };
E874B87E272158E7003954B9 /* XPIMRoomMicQueueImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIMRoomMicQueueImpl.h; sourceTree = "<group>"; };
E874B87F272158E7003954B9 /* XPIMRoomMicQueueImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPIMRoomMicQueueImpl.m; sourceTree = "<group>"; };
E874B881272158FA003954B9 /* XPIMRoomMicQueueInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIMRoomMicQueueInterface.h; sourceTree = "<group>"; };
E874B8822721590D003954B9 /* XPIMRoomMicQueueDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIMRoomMicQueueDelegate.h; sourceTree = "<group>"; };
E874B88627215D39003954B9 /* MicroModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroModel.h; sourceTree = "<group>"; };
E874B88727215D39003954B9 /* MicroModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroModel.m; sourceTree = "<group>"; };
E874B88927215EAF003954B9 /* MicroQueueItemModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroQueueItemModel.h; sourceTree = "<group>"; };
E874B88A27215EAF003954B9 /* MicroQueueItemModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroQueueItemModel.m; sourceTree = "<group>"; };
E874B88627215D39003954B9 /* MicroStateModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroStateModel.h; sourceTree = "<group>"; };
E874B88727215D39003954B9 /* MicroStateModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroStateModel.m; sourceTree = "<group>"; };
E874B88927215EAF003954B9 /* MicroQueueModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroQueueModel.h; sourceTree = "<group>"; };
E874B88A27215EAF003954B9 /* MicroQueueModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroQueueModel.m; sourceTree = "<group>"; };
E874B88D27216FFE003954B9 /* XPIMChatRoomMemberImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIMChatRoomMemberImpl.h; sourceTree = "<group>"; };
E874B88E27216FFE003954B9 /* XPIMChatRoomMemberImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPIMChatRoomMemberImpl.m; sourceTree = "<group>"; };
E874B890272170A6003954B9 /* XPIMChatRoomMemberInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPIMChatRoomMemberInterface.h; sourceTree = "<group>"; };
@@ -585,8 +572,6 @@
E89DA67127008D59008483C1 /* WalletInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WalletInfoModel.m; sourceTree = "<group>"; };
E89DA67327009ACD008483C1 /* XPMineRechargeNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineRechargeNavView.h; sourceTree = "<group>"; };
E89DA67427009ACD008483C1 /* XPMineRechargeNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineRechargeNavView.m; sourceTree = "<group>"; };
E89DA67627009F16008483C1 /* NSObject+JSONString.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSObject+JSONString.h"; sourceTree = "<group>"; };
E89DA67727009F16008483C1 /* NSObject+JSONString.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSObject+JSONString.m"; sourceTree = "<group>"; };
E8AC720B26F435F5007D6E91 /* UIImageView+LoadImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LoadImage.h"; sourceTree = "<group>"; };
E8AC720C26F435F5007D6E91 /* UIImageView+LoadImage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LoadImage.m"; sourceTree = "<group>"; };
E8AC720E26F43955007D6E91 /* UIImageConstant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIImageConstant.h; sourceTree = "<group>"; };
@@ -630,12 +615,8 @@
E8AEAEEF27141C430017FCE0 /* XPRoomMenuContainerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomMenuContainerView.m; sourceTree = "<group>"; };
E8AEAEF127141C7C0017FCE0 /* XPRoomMessageContainerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomMessageContainerView.h; sourceTree = "<group>"; };
E8AEAEF227141C7C0017FCE0 /* XPRoomMessageContainerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomMessageContainerView.m; sourceTree = "<group>"; };
E8AEAEF427141C910017FCE0 /* XPRoomPositionContainView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPositionContainView.h; sourceTree = "<group>"; };
E8AEAEF527141C910017FCE0 /* XPRoomPositionContainView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPositionContainView.m; sourceTree = "<group>"; };
E8AEAEF727141CA30017FCE0 /* XPRoomInfoContainerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomInfoContainerView.h; sourceTree = "<group>"; };
E8AEAEF827141CA30017FCE0 /* XPRoomInfoContainerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomInfoContainerView.m; sourceTree = "<group>"; };
E8B825B526E9A7D8009E8E9F /* BaseObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseObject.h; sourceTree = "<group>"; };
E8B825B626E9A7D8009E8E9F /* BaseObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BaseObject.m; sourceTree = "<group>"; };
E8B825BD26E9E57D009E8E9F /* LoginTicketInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginTicketInfo.h; sourceTree = "<group>"; };
E8B825BE26E9E57D009E8E9F /* LoginTicketInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginTicketInfo.m; sourceTree = "<group>"; };
E8B825C026EA00DF009E8E9F /* LoginVerifCodePresent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginVerifCodePresent.h; sourceTree = "<group>"; };
@@ -988,8 +969,6 @@
189DD56026DE456100AB55B1 /* Model */ = {
isa = PBXGroup;
children = (
E8B825B526E9A7D8009E8E9F /* BaseObject.h */,
E8B825B626E9A7D8009E8E9F /* BaseObject.m */,
187EEEDA26E89B32002833B2 /* BaseModel.h */,
187EEEDB26E89B32002833B2 /* BaseModel.m */,
187EEEDF26E89BFB002833B2 /* AccountModel.h */,
@@ -1141,7 +1120,6 @@
isa = PBXGroup;
children = (
E865964E2701A1A900846EBD /* StatisticsService */,
E89DA66C2700873B008483C1 /* NSObject */,
E89DA6612700590A008483C1 /* IAPHelper */,
E8B846B926FD7BE600A777FE /* UploadImage */,
E8EEB8EA26FC2050007C6EBA /* SDPhotoBrowser */,
@@ -1152,6 +1130,8 @@
189DD74726E21D8400AB55B1 /* KeyChain */,
189DD74226E21CCC00AB55B1 /* Reachability */,
189DD73626E21C3F00AB55B1 /* YYUtility */,
180806D627293794001FD836 /* NSObject+MJExtension.h */,
180806D727293794001FD836 /* NSObject+MJExtension.m */,
);
path = Tool;
sourceTree = "<group>";
@@ -1366,15 +1346,6 @@
path = AppDelegate;
sourceTree = "<group>";
};
E81D587F27200804003063FE /* SeapkingView */ = {
isa = PBXGroup;
children = (
E81D58802720082A003063FE /* XPRoomPositionItemSpeakingView.h */,
E81D58812720082A003063FE /* XPRoomPositionItemSpeakingView.m */,
);
path = SeapkingView;
sourceTree = "<group>";
};
E82109AA26F1C86E00FC3319 /* CountDown */ = {
isa = PBXGroup;
children = (
@@ -1447,41 +1418,16 @@
path = StatisticsService;
sourceTree = "<group>";
};
E8680707271959090024F48F /* PositionView */ = {
E8680707271959090024F48F /* MicroView */ = {
isa = PBXGroup;
children = (
E86807152719678B0024F48F /* View */,
E868070C27195D4C0024F48F /* Object */,
E8680708271959DB0024F48F /* XPRoomPositionView.h */,
E8680709271959DB0024F48F /* XPRoomPositionView.m */,
180806DA27297269001FD836 /* MicroViewProtocol.h */,
E8680716271967B00024F48F /* MicroView.h */,
E8680717271967B00024F48F /* MicroView.m */,
E81D58802720082A003063FE /* MicroWaveView.h */,
E81D58812720082A003063FE /* MicroWaveView.m */,
);
path = PositionView;
sourceTree = "<group>";
};
E868070C27195D4C0024F48F /* Object */ = {
isa = PBXGroup;
children = (
E868070D27195DD30024F48F /* XPRoomPositionLayoutImpl.h */,
E868070E27195DD30024F48F /* XPRoomPositionLayoutImpl.m */,
E868071027195DF00024F48F /* XPRoomPositionLayoutProtocol.h */,
E868071427195E340024F48F /* XPRoomPositionDataSourceProtocol.h */,
E868071127195E1A0024F48F /* XPRoomPositionDelegateImpl.h */,
E868071227195E1A0024F48F /* XPRoomPositionDelegateImpl.m */,
E85B02212722A3C600298C52 /* XPRoomPositionDelgate.h */,
);
path = Object;
sourceTree = "<group>";
};
E86807152719678B0024F48F /* View */ = {
isa = PBXGroup;
children = (
E81D587F27200804003063FE /* SeapkingView */,
E8680716271967B00024F48F /* XPRoomPostionBaseItemView.h */,
E8680717271967B00024F48F /* XPRoomPostionBaseItemView.m */,
E8680719271969A50024F48F /* XCRoomPostionNickView.h */,
E868071A271969A50024F48F /* XCRoomPostionNickView.m */,
);
path = View;
path = MicroView;
sourceTree = "<group>";
};
E872308A26E89D5100B90D4F /* CustomView */ = {
@@ -1504,7 +1450,6 @@
children = (
E874B89227217D64003954B9 /* RoomMessage */,
E874B88C27216FB6003954B9 /* ChatRoomMember */,
E874B87D272158B9003954B9 /* MicroQueue */,
E874B8752721436F003954B9 /* Room */,
E874B86A272105DD003954B9 /* XPIMManager.h */,
E874B86B272105DD003954B9 /* XPIMManager.m */,
@@ -1523,25 +1468,13 @@
path = Room;
sourceTree = "<group>";
};
E874B87D272158B9003954B9 /* MicroQueue */ = {
isa = PBXGroup;
children = (
E874B88527215CFF003954B9 /* Model */,
E874B87E272158E7003954B9 /* XPIMRoomMicQueueImpl.h */,
E874B87F272158E7003954B9 /* XPIMRoomMicQueueImpl.m */,
E874B881272158FA003954B9 /* XPIMRoomMicQueueInterface.h */,
E874B8822721590D003954B9 /* XPIMRoomMicQueueDelegate.h */,
);
path = MicroQueue;
sourceTree = "<group>";
};
E874B88527215CFF003954B9 /* Model */ = {
isa = PBXGroup;
children = (
E874B88627215D39003954B9 /* MicroModel.h */,
E874B88727215D39003954B9 /* MicroModel.m */,
E874B88927215EAF003954B9 /* MicroQueueItemModel.h */,
E874B88A27215EAF003954B9 /* MicroQueueItemModel.m */,
E874B88627215D39003954B9 /* MicroStateModel.h */,
E874B88727215D39003954B9 /* MicroStateModel.m */,
E874B88927215EAF003954B9 /* MicroQueueModel.h */,
E874B88A27215EAF003954B9 /* MicroQueueModel.m */,
);
path = Model;
sourceTree = "<group>";
@@ -1652,15 +1585,6 @@
path = IAPHelper;
sourceTree = "<group>";
};
E89DA66C2700873B008483C1 /* NSObject */ = {
isa = PBXGroup;
children = (
E89DA67627009F16008483C1 /* NSObject+JSONString.h */,
E89DA67727009F16008483C1 /* NSObject+JSONString.m */,
);
path = NSObject;
sourceTree = "<group>";
};
E8AC720A26F435AF007D6E91 /* UIImageView */ = {
isa = PBXGroup;
children = (
@@ -1690,11 +1614,12 @@
E88F5EAA271ECCDC00FF9B33 /* Category */,
E8AEAED4271412EC0017FCE0 /* XPRoomViewController.h */,
E8AEAED5271412EC0017FCE0 /* XPRoomViewController.m */,
181D7F222727DB1E00B7C059 /* RoomDelegate.h */,
E8AEAEE527141ACC0017FCE0 /* ActivityContainerView */,
E8AEAEE727141ACC0017FCE0 /* BaseUIContainerView */,
E8AEAEE927141ACC0017FCE0 /* MenuContainerView */,
E8AEAEE627141ACC0017FCE0 /* MessageContainerView */,
E8AEAEEA27141ACC0017FCE0 /* PositionContainerView */,
E8AEAEEA27141ACC0017FCE0 /* StageView */,
E8AEAEE827141ACC0017FCE0 /* RoomInfoContainerView */,
);
path = View;
@@ -1749,14 +1674,17 @@
path = MenuContainerView;
sourceTree = "<group>";
};
E8AEAEEA27141ACC0017FCE0 /* PositionContainerView */ = {
E8AEAEEA27141ACC0017FCE0 /* StageView */ = {
isa = PBXGroup;
children = (
E8680707271959090024F48F /* PositionView */,
E8AEAEF427141C910017FCE0 /* XPRoomPositionContainView.h */,
E8AEAEF527141C910017FCE0 /* XPRoomPositionContainView.m */,
E874B88527215CFF003954B9 /* Model */,
E8680707271959090024F48F /* MicroView */,
181D7F192726CE2A00B7C059 /* StageView.h */,
181D7F1A2726CE2A00B7C059 /* StageView.m */,
181D7F1F2727D9DB00B7C059 /* SocialStageView.h */,
181D7F202727D9DB00B7C059 /* SocialStageView.m */,
);
path = PositionContainerView;
path = StageView;
sourceTree = "<group>";
};
E8B825BC26E9E520009E8E9F /* Model */ = {
@@ -2141,13 +2069,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E85B02222722A3D900298C52 /* XPRoomPositionDelgate.h in Sources */,
E874B89B27218ABC003954B9 /* XPIMChatRoomMessageInterface.h in Sources */,
E874B89A27218AAF003954B9 /* XPIMChatRoomMessageDelegate.h in Sources */,
E874B8912721712B003954B9 /* XPIMChatRoomMemberInterface.h in Sources */,
E874B88427215B0E003954B9 /* XPIMRoomMicQueueDelegate.h in Sources */,
E874B88327215B06003954B9 /* XPIMRoomMicQueueInterface.h in Sources */,
E874B87C27214888003954B9 /* XPIMRoomDelegate.h in Sources */,
181D7F1B2726CE2A00B7C059 /* StageView.m in Sources */,
E874B87B27214882003954B9 /* XPIMRoomInterface.h in Sources */,
E8B846D826FDE17300A777FE /* XPMineRechargeProtocol.h in Sources */,
E8B846C726FDB45000A777FE /* XPMineUserInfoAlbumProtocol.h in Sources */,
@@ -2183,7 +2109,6 @@
E8B825C726EA0D9A009E8E9F /* LoginVerifCodeProtocol.h in Sources */,
E824544E26F5BC1A00BE8163 /* XPMineModifPayPwdView.m in Sources */,
E8B825CA26EA1231009E8E9F /* LoginVerifCodeViewController.m in Sources */,
E874B880272158E7003954B9 /* XPIMRoomMicQueueImpl.m in Sources */,
189DD76226E60DDC00AB55B1 /* Api+Login.m in Sources */,
18E7B22626E8CDCF0064BC9B /* XplanFlutterBoostDelegate.m in Sources */,
E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */,
@@ -2195,7 +2120,6 @@
E8E70D8926F2F58F00F03460 /* XPMineMatchTableViewCell.m in Sources */,
E88B5CA826FB089C00DA9178 /* XPMineTeenagePwdViewController.m in Sources */,
E81C279626EB39CC0031E639 /* LoginForgetPasswordPresent.m in Sources */,
E8B825B726E9A7D8009E8E9F /* BaseObject.m in Sources */,
E8AC723526F49939007D6E91 /* XPMineNotificaPresenter.m in Sources */,
189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */,
E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */,
@@ -2203,7 +2127,6 @@
E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */,
E84B0E3F2727EDF6008818C6 /* XPRoomMessageTableViewCell.m in Sources */,
E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */,
E89DA67827009F16008483C1 /* NSObject+JSONString.m in Sources */,
E874B89527217DA6003954B9 /* XPIMChatRoomMessageImpl.m in Sources */,
E81C27AB26EF2D920031E639 /* ThirdUserInfo.m in Sources */,
E874B86C272105DD003954B9 /* XPIMManager.m in Sources */,
@@ -2211,12 +2134,12 @@
187EEEFE26E8A82C002833B2 /* NSObject+AutoCoding.m in Sources */,
E8AC721926F46E0B007D6E91 /* XPMineSettingItemModel.m in Sources */,
189DD55A26DE39D200AB55B1 /* BaseMvpPresenter.m in Sources */,
180806D827293794001FD836 /* NSObject+MJExtension.m in Sources */,
189DD6FF26E20E5900AB55B1 /* HttpRequestHelper.m in Sources */,
E8AEAED6271412EC0017FCE0 /* XPRoomViewController.m in Sources */,
E8E70D9226F2F60C00F03460 /* XPMineItemModel.m in Sources */,
189DD74A26E21D8400AB55B1 /* SSKeychain.m in Sources */,
E8B846CF26FDD96100A777FE /* XPMineRechageHeadView.m in Sources */,
E868070F27195DD30024F48F /* XPRoomPositionLayoutImpl.m in Sources */,
186A534926FC6ED900D67B2C /* TTAlertMessageAttributedConfig.m in Sources */,
E81C27AE26EF39AB0031E639 /* AppDelegate+ThirdConfig.m in Sources */,
E8E70D8326F2F51A00F03460 /* XPMineHeadView.m in Sources */,
@@ -2249,7 +2172,7 @@
18E7B1B726E8B2D10064BC9B /* Api+Main.m in Sources */,
E8B846D326FDDBE600A777FE /* XPMineRechargeTableViewCell.m in Sources */,
E824546126F5F4E400BE8163 /* XPMineResetPayPwdViewController.m in Sources */,
E81D58822720082A003063FE /* XPRoomPositionItemSpeakingView.m in Sources */,
E81D58822720082A003063FE /* MicroWaveView.m in Sources */,
E8B825C226EA00DF009E8E9F /* LoginVerifCodePresent.m in Sources */,
E88B5CB026FB1C6500DA9178 /* XPMineTeenagerPresenter.m in Sources */,
186A534B26FC6ED900D67B2C /* TTPopupManagerService.m in Sources */,
@@ -2260,13 +2183,13 @@
E824545626F5E51900BE8163 /* XPMineVerifIdentityViewController.m in Sources */,
186A534726FC6ED900D67B2C /* TTAlertConfig.m in Sources */,
18E7B31E26F0984C0064BC9B /* UserLevelVo.m in Sources */,
E874B88B27215EAF003954B9 /* MicroQueueItemModel.m in Sources */,
E874B88B27215EAF003954B9 /* MicroQueueModel.m in Sources */,
E8EEB90626FC5772007C6EBA /* XPMineUserInfoEditViewController.m in Sources */,
E8B846D626FDE01B00A777FE /* XPMineRechargePresenter.m in Sources */,
E8EEB91426FC7786007C6EBA /* XPMineUserInfoNickViewController.m in Sources */,
18E7B31B26F0982E0064BC9B /* UserExpand.m in Sources */,
E824543526F57D6E00BE8163 /* XPLoginVerifBindPhoneViewController.m in Sources */,
E8680718271967B00024F48F /* XPRoomPostionBaseItemView.m in Sources */,
E8680718271967B00024F48F /* MicroView.m in Sources */,
E8B825CD26EA18C8009E8E9F /* ThemeColor.m in Sources */,
E8AC720D26F435F5007D6E91 /* UIImageView+LoadImage.m in Sources */,
E88B5CBD26FB3BDF00DA9178 /* XPTeenagerAlertView.m in Sources */,
@@ -2306,12 +2229,11 @@
18486213271EA9DA005FC5DC /* RtcManager.m in Sources */,
186A536926FC6F2E00D67B2C /* XCShareView.m in Sources */,
186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */,
E868070A271959DB0024F48F /* XPRoomPositionView.m in Sources */,
E8B825BF26E9E57D009E8E9F /* LoginTicketInfo.m in Sources */,
181D7F212727D9DB00B7C059 /* SocialStageView.m in Sources */,
187EEEF026E89FE8002833B2 /* AccountInfoStorage.m in Sources */,
186A536B26FC6F2E00D67B2C /* XCShareItemCell.m in Sources */,
E8B846C526FDB41A00A777FE /* XPMineUserInfolbumPresenter.m in Sources */,
E868071327195E1A0024F48F /* XPRoomPositionDelegateImpl.m in Sources */,
E872309326E8D31500B90D4F /* LoginVerifCodeView.m in Sources */,
186A534626FC6ED900D67B2C /* TTPopup.m in Sources */,
E81C278C26EAFAF60031E639 /* Base64.m in Sources */,
@@ -2338,15 +2260,13 @@
E84B0E422727EE0A008818C6 /* XPRoomMessageHeaderView.m in Sources */,
186A534826FC6ED900D67B2C /* TTAlertButtonConfig.m in Sources */,
E89D60BA271D643A001F8895 /* Api+Room.m in Sources */,
E8AEAEF627141C910017FCE0 /* XPRoomPositionContainView.m in Sources */,
E872308926E89BE000B90D4F /* LoginPhoneViewController.m in Sources */,
18E7B29026EA0E6B0064BC9B /* FlutterBoost+Xplan.m in Sources */,
E8B846DC26FDE24300A777FE /* RechargeListModel.m in Sources */,
189DD75926E6003C00AB55B1 /* Api.m in Sources */,
E88B5CB826FB325200DA9178 /* XPMineTeenagerPwdPresenter.m in Sources */,
E874B88827215D39003954B9 /* MicroModel.m in Sources */,
E868071B271969A50024F48F /* XCRoomPostionNickView.m in Sources */,
E84B0E462727EF9D008818C6 /* XPRoomMessageDisplayModel.m in Sources */,
E874B88827215D39003954B9 /* MicroStateModel.m in Sources */,
E89D60C1271D64B9001F8895 /* RoomInfoModel.m in Sources */,
E89DA66727006443008483C1 /* RechargeStorage.m in Sources */,
189DD53F26DE255600AB55B1 /* main.m in Sources */,

View File

@@ -5,11 +5,11 @@
// Created by zu on 2021/9/8.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface AccountModel : BaseObject
@interface AccountModel : NSObject
@property (nonatomic , assign) NSString *uid;
@property (nonatomic , copy) NSString *jti;

View File

@@ -5,11 +5,11 @@
// Created by zu on 2021/9/8.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface BaseModel : BaseObject
@interface BaseModel : NSObject
@property (nonatomic , strong) id data;
@property (nonatomic , assign) NSInteger code;

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/9/9.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface LoginTicketInfo : BaseObject
@interface LoginTicketInfo : NSObject
@property(nonatomic, strong) NSString *issue_type;
///数组中的第一个 就是ticket 历史遗留问题

View File

@@ -5,11 +5,11 @@
// Created by zu on 2021/9/14.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserExpand : BaseObject
@interface UserExpand : NSObject
@property (nonatomic , assign) NSInteger id;
@property (nonatomic , assign) BOOL showLocation;
@property (nonatomic , assign) NSInteger uid;

View File

@@ -5,7 +5,7 @@
// Created by zu on 2021/9/14.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
#import "UserExpand.h"
#import "UserLevelVo.h"
#import "UserInfoSkillVo.h"
@@ -14,7 +14,7 @@
NS_ASSUME_NONNULL_BEGIN
@interface UserInfoModel : BaseObject
@interface UserInfoModel : NSObject
@property (nonatomic , assign) NSInteger bindType;
@property (nonatomic , assign) NSInteger createTime;
@property (nonatomic , assign) BOOL parentMode;

View File

@@ -5,11 +5,11 @@
// Created by zu on 2021/9/14.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserInfoSkillVo : BaseObject
@interface UserInfoSkillVo : NSObject
@property (nonatomic , assign) BOOL liveTag;
@end

View File

@@ -5,7 +5,7 @@
// Created by zu on 2021/9/14.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, UserLevelType) {
@@ -14,7 +14,7 @@ typedef NS_ENUM(NSInteger, UserLevelType) {
UserLevelType_Robot = 3, ///机器人
};
@interface UserLevelVo : BaseObject
@interface UserLevelVo : NSObject
@property (nonatomic , copy) NSString * experUrl;
@property (nonatomic , assign) NSInteger charmLevelSeq;
@property (nonatomic , copy) NSString * experLevelName;

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/9/23.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserPhoto : BaseObject
@interface UserPhoto : NSObject
@property (copy, nonatomic) NSString *photoUrl;
@property (copy, nonatomic) NSString *pid;
@end

View File

@@ -56,7 +56,7 @@
[manager GET:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject];
#ifdef DEBUG
NSLog(@"\n%@", [baseModel model2json]);
NSLog(@"\n%@", [baseModel toJSONString]);
#endif
if (baseModel.code == 200) {
success(baseModel);
@@ -90,7 +90,7 @@
[manager POST:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
BaseModel *baseModel = [BaseModel modelWithDictionary:responseObject];
#ifdef DEBUG
NSLog(@"\n%@", [baseModel model2json]);
NSLog(@"\n%@", [baseModel toJSONString]);
#endif
if (baseModel.code == 200) {
success(baseModel);

View File

@@ -1,14 +1,16 @@
//
// BaseObject.h
// NSObject+MJExtension.h
// xplan-ios
//
// Created by 冯硕 on 2021/9/9.
// Created by zu on 2021/10/27.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface BaseObject : NSObject
@interface NSObject (MJExtension)
/// 依据数组初始化一个实例数组
/// @param json json 数据
+ (NSArray *)modelsWithArray:(id)json;
@@ -24,8 +26,11 @@ NS_ASSUME_NONNULL_BEGIN
///model 转字典
- (NSDictionary *)model2dictionary;
///model 转 json
- (NSString *)model2json;
///转 json string
- (NSString *)toJSONString;
///转 json object
- (id)toJSONObject;
///扩展方法 按需索取 重写即可
///如果一个模型中 包含一个数组 数组中是另一个模型

View File

@@ -1,59 +1,64 @@
//
// BaseObject.m
// NSObject+MJExtension.m
// xplan-ios
//
// Created by on 2021/9/9.
// Created by zu on 2021/10/27.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
#import <MJExtension/MJExtension.h>
@implementation BaseObject
@implementation NSObject (MJExtension)
///
/// @param json json
+ (NSArray *)modelsWithArray:(id)json {
return [self mj_objectArrayWithKeyValuesArray:json];
return [self mj_objectArrayWithKeyValuesArray:json];
}
///
/// @param dictionary
+ (instancetype)modelWithDictionary:(NSDictionary *)dictionary {
return [self mj_objectWithKeyValues:dictionary];
return [self mj_objectWithKeyValues:dictionary];
}
/// JSON
/// @param json json
+ (instancetype)modelWithJSON:(id)json {
return [self mj_objectWithKeyValues:json];
return [self mj_objectWithKeyValues:json];
}
///model
- (NSDictionary *)model2dictionary {
return [[self mj_keyValues] copy];
return [[self mj_keyValues] copy];
}
- (NSString *)model2json {
- (NSString *)toJSONString {
return [self mj_JSONString];
}
- (id)toJSONObject {
return [self mj_JSONObject];
}
///
+ (NSDictionary *)mj_objectClassInArray {
return [self objectClassInArray];
return [self objectClassInArray];
}
///
+ (NSDictionary *)mj_replacedKeyFromPropertyName {
return [self replacedKeyFromPropertyName];
return [self replacedKeyFromPropertyName];
}
///
///
+ (NSDictionary *)objectClassInArray {
return @{};
return @{};
}
/// id -> ID name -> other.name
+ (NSDictionary *)replacedKeyFromPropertyName {
return @{};
return @{};
}
@end

View File

@@ -1,18 +0,0 @@
//
// NSObject+JSONString.h
// xplan-ios
//
// Created by 冯硕 on 2021/9/26.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSObject (JSONString)
- (NSString *)objectToJSONString;
- (id)JSONObject;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,21 +0,0 @@
//
// NSObject+JSONString.m
// xplan-ios
//
// Created by on 2021/9/26.
//
#import "NSObject+JSONString.h"
#import <MJExtension/MJExtension.h>
@implementation NSObject (JSONString)
- (NSString *)objectToJSONString {
return [self mj_JSONString];
}
///
- (id)JSONObject {
return [self mj_JSONObject];
}
@end

View File

@@ -1,12 +0,0 @@
//
// MicroModel.m
// xplan-ios
//
// Created by on 2021/10/21.
//
#import "MicroModel.h"
@implementation MicroModel
@end

View File

@@ -1,12 +0,0 @@
//
// MicroQueueItemModel.m
// xplan-ios
//
// Created by on 2021/10/21.
//
#import "MicroQueueItemModel.h"
@implementation MicroQueueItemModel
@end

View File

@@ -1,19 +0,0 @@
//
// XPIMRoomMicQueueDelegate.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/21.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class MicroQueueItemModel;
@protocol XPIMRoomMicQueueDelegate <NSObject>
///获取房间队列成功
- (void)onGetRoomMicroQueueSuccess:(NSDictionary<NSString *, MicroQueueItemModel *>*)microQueue;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,16 +0,0 @@
//
// XPIMRoomMicQueueImpl.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/21.
//
#import <Foundation/Foundation.h>
#import "XPIMRoomMicQueueInterface.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPIMRoomMicQueueImpl : NSObject <XPIMRoomMicQueueInterface>
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,285 +0,0 @@
//
// XPIMRoomMicQueueImpl.m
// xplan-ios
//
// Created by on 2021/10/21.
//
#import "XPIMRoomMicQueueImpl.h"
///Third
#import <NIMSDK/NIMSDK.h>
///Tool
#import "XPIMManager.h"
#import "RtcManager.h"
#import "AccountInfoStorage.h"
#import "NSObject+JSONString.h"
///Model
#import "MicroModel.h"
#import "MicroQueueItemModel.h"
#import "RoomInfoModel.h"
#import "UserInfoModel.h"
///P
#import "XPIMRoomMicQueueDelegate.h"
#define MIC_COUNT(Type) [self roomTypecpORnormal:Type]
@interface XPIMRoomMicQueueImpl ()
/// < >
@property (nonatomic,strong) NSMutableDictionary<NSString *, MicroQueueItemModel *> *queue;
///
@property (nonatomic,strong) NSMutableArray *delegateArray;
///
@property (nonatomic,strong) UserInfoModel *userInfo;
@end
@implementation XPIMRoomMicQueueImpl
#pragma mark - Private Method
//
-(NSInteger )roomTypecpORnormal:(RoomType )type{
if (type == RoomType_Game){
return 9;
}else{
return 9;
}
}
///
- (void)configDefaultMicQueue {
RoomInfoModel * roomfInfo = [XPIMManager shareManager].chatRoomManager.getCurrentRoomInfo;
for (int i = 0 ; i < MIC_COUNT(roomfInfo.type); i++) {
MicroModel *state = [[MicroModel alloc]init];
state.posState = MicroPosStateType_Free;
state.micState = MicroMicStateType_Open;
MicroQueueItemModel *micSequence = [[MicroQueueItemModel alloc]init];
micSequence.microState = state;
micSequence.userInfo = nil;
[self.queue setObject:micSequence forKey:[NSString stringWithFormat:@"%d",i-1]];
}
}
///uid
- (MicroQueueItemModel *)findUserMicroModel:(NSInteger)uid {
NSArray * users = self.microQueue.allValues;
for (int i = 0; i < users.count; i++) {
MicroQueueItemModel * model = [users objectAtIndex:i];
if (model.userInfo && model.userInfo.uid == uid) {
return model;
}
}
return nil;
}
///
/// @param position
- (void)removeChatRoomQueue:(NSString *)position success:(void(^)(BOOL success))success{
if (position) {
NIMChatroomQueueRemoveRequest *request = [[NIMChatroomQueueRemoveRequest alloc]init];
request.key = position;
request.roomId = [NSString stringWithFormat:@"%ld", [XPIMManager shareManager].chatRoomManager.getCurrentRoomInfo.roomId];
[[NIMSDK sharedSDK].chatroomManager removeChatroomQueueObject:request completion:^(NSError * _Nullable error, NSDictionary<NSString *,NSString *> * _Nullable element) {
if (error == nil ) {
///
if (success) {
success(YES);
}
}else {
///
[self fetchRoomQueue:[NSString stringWithFormat:@"%ld", [XPIMManager shareManager].chatRoomManager.getCurrentRoomInfo.roomId]];
}
}];
}
}
///
- (void)updateChatroomQueueObject:(NSString *)position userInfo:(UserInfoModel *)userInfo {
NSDictionary * dic = @{@"uid":@(userInfo.uid), @"nick":userInfo.nick, @"gender":@(userInfo.gender), @"avatar":userInfo.avatar};
NIMChatroomQueueUpdateRequest *request = [[NIMChatroomQueueUpdateRequest alloc]init];
request.key = position;
request.value = [dic objectToJSONString];
request.roomId = [NSString stringWithFormat:@"%ld",[XPIMManager shareManager].chatRoomManager.getCurrentRoomInfo.roomId];
request.transient = YES;
[[NIMSDK sharedSDK].chatroomManager updateChatroomQueueObject:request completion:^(NSError * _Nullable error) {
if (error == nil ) {
}else {
}
}];
}
- (void)updateChatRoomQueue:(NSString *)position{
///TODO
UserInfoModel * userInfo = self.userInfo;
MicroQueueItemModel * model = [self findUserMicroModel:userInfo.uid];
if (model) {///
if (position.intValue != model.microState.position) {
[self removeChatRoomQueue:[NSString stringWithFormat:@"%d", model.microState.position] success:^(BOOL success) {
[self updateChatroomQueueObject:position userInfo:userInfo];
}];
} else {
[self updateChatroomQueueObject:position userInfo:userInfo];
}
} else {
[self updateChatroomQueueObject:position userInfo:userInfo];
}
}
#pragma mark - XPIMRoomMicQueueInterface
///
- (void)enterRoomRepairMicQueue:(NSDictionary *)micDictionary {
[self configDefaultMicQueue];
for (NSString *position in micDictionary.allKeys) {
MicroModel *state = [MicroModel modelWithJSON:micDictionary[position]];
MicroQueueItemModel *sequence = [self.queue objectForKey:position];
sequence.microState = state;
}
}
///
- (void)fetchRoomQueue:(NSString *)roomid {
[[NIMSDK sharedSDK].chatroomManager fetchChatroomQueue:roomid completion:^(NSError * _Nullable error, NSArray<NSDictionary<NSString *,NSString *> *> * _Nullable info) {
if (error == nil && info!= nil) {
for (NSDictionary *item in info) {
UserInfoModel *userInfo = [UserInfoModel modelWithJSON:item.allValues.firstObject];
NSString *position = item.allKeys.firstObject;
MicroQueueItemModel *sequence = [self.queue objectForKey:position];
sequence.userInfo = userInfo;
}
for (id<XPIMRoomMicQueueDelegate> delegate in self.delegateArray) {
if ([delegate respondsToSelector:@selector(onGetRoomMicroQueueSuccess:)]) {
[delegate onGetRoomMicroQueueSuccess:self.queue];
}
}
} else {
NSLog(@"获取队列失败");
}
}];
}
///
- (NSDictionary *)microQueue {
return [self.queue copy];
}
- (void)upMic:(NSString *)position {
///
UserInfoModel *userInfo = [[self.queue objectForKey:position] userInfo];
MicroModel *micState = [[self.queue objectForKey:position] microState];
if (userInfo) {
return;
} else {
NSString * uid = [[AccountInfoStorage instance] getUid];
if (micState.posState == MicroPosStateType_Free) {
[self updateChatRoomQueue:position];
} else {
[[[XPIMManager shareManager].chatRoomMemberManager rac_queryChatRoomMember:uid] subscribeNext:^(id _Nullable x) {
NIMChatroomMember * member = x;
if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMTeamMemberTypeManager) {///
[self updateChatRoomQueue:position];
}
}];
}
}
}
- (void)downMic:(NSString *)position {
[self removeChatRoomQueue:position success:nil];
}
///
- (void)updateMicroStatus:(NSArray *)microStatus {
for (MicroModel * microState in microStatus) {
MicroQueueItemModel *micSequence = [self.queue objectForKey:[NSString stringWithFormat:@"%d",microState.position]];
if (micSequence != nil) {
micSequence.microState = microState;
}
}
for (id<XPIMRoomMicQueueDelegate> delegate in self.delegateArray) {
if ([delegate respondsToSelector:@selector(onGetRoomMicroQueueSuccess:)]) {
[delegate onGetRoomMicroQueueSuccess:self.queue];
}
}
}
- (void)onReceiveRoomQueueUpdate:(NIMChatroomNotificationContent *)content {
NSDictionary *temp = (NSDictionary *)content.ext;
UserInfoModel *userInfo = [UserInfoModel modelWithJSON:[temp objectForKey:NIMChatroomEventInfoQueueChangeItemValueKey]];
//
NSString *oldPosition;
// uid
for (MicroQueueItemModel *sequence in self.queue.allValues) {
if (userInfo.uid == sequence.userInfo.uid) {
oldPosition = @(sequence.microState.position).stringValue;
sequence.userInfo = nil;
}
}
if ([temp[NIMChatroomEventInfoQueueChangeTypeKey] intValue] == 1) {//
MicroQueueItemModel *sequence = [self.queue objectForKey:[temp objectForKey:NIMChatroomEventInfoQueueChangeItemKey]];
sequence.userInfo = userInfo;
///
MicroModel * micState = sequence.microState;
if (micState.micState == MicroMicStateType_Open) {
[[RtcManager instance] broadcast:YES];
} else {
[[RtcManager instance] broadcast:NO];
}
for (id<XPIMRoomMicQueueDelegate> delegate in self.delegateArray) {
if ([delegate respondsToSelector:@selector(onGetRoomMicroQueueSuccess:)]) {
[delegate onGetRoomMicroQueueSuccess:self.queue];
}
}
}else{//
[[RtcManager instance] broadcast:NO];
for (id<XPIMRoomMicQueueDelegate> delegate in self.delegateArray) {
if ([delegate respondsToSelector:@selector(onGetRoomMicroQueueSuccess:)]) {
[delegate onGetRoomMicroQueueSuccess:self.queue];
}
}
}
}
- (void)resetMicroQueue {
self.queue = nil;
}
///
- (void)addDelegate:(id<XPIMRoomMicQueueDelegate>)delegate {
if (delegate) {
[self.delegateArray addObject:delegate];
}
}
///
- (void)removeDelegate:(id<XPIMRoomMicQueueDelegate>)delegate {
if (delegate && [self.delegateArray containsObject:delegate]) {
[self.delegateArray removeObject:delegate];
delegate = nil;
}
}
#warning to do
- (void)setCurrentUserInfo:(UserInfoModel * _Nullable)userInfo {
self.userInfo = userInfo;
}
#pragma mark - Getters And Setters
- (NSMutableDictionary<NSString *,MicroQueueItemModel *> *)queue {
if (!_queue) {
_queue= [NSMutableDictionary dictionary];
}
return _queue;
}
- (NSMutableArray *)delegateArray {
if (!_delegateArray) {
_delegateArray = [NSMutableArray array];
}
return _delegateArray;
}
@end

View File

@@ -1,47 +0,0 @@
//
// XPIMRoomMicQueueInterface.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/21.
//
#import <Foundation/Foundation.h>
///Third
#import <NIMSDK/NIMSDK.h>
#import "XPIMRoomMicQueueDelegate.h"
NS_ASSUME_NONNULL_BEGIN
@class UserInfoModel;
@protocol XPIMRoomMicQueueInterface <NSObject>
///进入房间成功之后根据扩展字段整理麦序
- (void)enterRoomRepairMicQueue:(NSDictionary *)micDictory;
///获取房间队列
- (void)fetchRoomQueue:(NSString *)roomid;
///麦序的队列
- (NSDictionary *)microQueue;
///重置队列信息
- (void)resetMicroQueue;
///上麦 -1 到 7
- (void)upMic:(NSString *)position;
///下麦 -1 到 7
- (void)downMic:(NSString *)position;
///更新坑位的状态
- (void)updateMicroStatus:(NSArray *)microStatus;
///收到了上下麦的消息
- (void)onReceiveRoomQueueUpdate:(NIMChatroomNotificationContent *)content;
///添加代理
- (void)addDelegate:(id<XPIMRoomMicQueueDelegate>)delegate;
///移除代理
- (void)removeDelegate:(id<XPIMRoomMicQueueDelegate>)delegate;
///TODO 先这样用着 上麦需要用户信息
- (void)setCurrentUserInfo:(UserInfoModel * _Nullable)userInfo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -9,13 +9,13 @@
///Third
#import <NIMSDK/NIMSDK.h>
///Tool
#import "NSObject+JSONString.h"
#import "NSObject+MJExtension.h"
#import "XPIMManager.h"
#import "RtcManager.h"
///Model
#import "UserInfoModel.h"
#import "RoomInfoModel.h"
#import "MicroModel.h"
#import "MicroStateModel.h"
///P
#import "XPIMRoomDelegate.h"
@@ -45,7 +45,7 @@
#pragma mark - Private Method
///
- (void)onRoomInfoUpdated:(NIMChatroomNotificationContent *)content {
NSDictionary *roomInfoDictionary = [content.notifyExt JSONObject];
NSDictionary *roomInfoDictionary = [content.notifyExt toJSONObject];
int type = [roomInfoDictionary[@"type"] intValue];
switch (type) {
case 1:{
@@ -60,8 +60,8 @@
break;
case 2:{///
///
MicroModel *microState = [MicroModel modelWithJSON:roomInfoDictionary[@"micInfo"]];
[[XPIMManager shareManager].microQueueManager updateMicroStatus:@[microState]];
MicroStateModel *microState = [MicroStateModel modelWithJSON:roomInfoDictionary[@"micInfo"]];
// [[XPIMManager shareManager].microQueueManager updateMicroStatus:@[microState]];
}
break;
//
@@ -73,15 +73,15 @@
[delegate onChatRoomInfoUpdated:self.roomInfo];
}
}
NSArray * array = [MicroModel modelsWithArray:roomInfoDictionary[@"micInfo"]];
[[XPIMManager shareManager].microQueueManager updateMicroStatus:array];
NSArray * array = [MicroStateModel modelsWithArray:roomInfoDictionary[@"micInfo"]];
// [[XPIMManager shareManager].microQueueManager updateMicroStatus:array];
}
break;
}
}
- (void)onRoomQueueUpdate:(NIMChatroomNotificationContent *)content {
[[XPIMManager shareManager].microQueueManager onReceiveRoomQueueUpdate:content];
// [[XPIMManager shareManager].microQueueManager onReceiveRoomQueueUpdate:content];
if (content.eventType == NIMChatroomEventTypeQueueChange) {
}
@@ -165,7 +165,7 @@
#pragma mark - XPIMRoomInterface
- (void)enterRoomWithRoomId:(NSString *)roomId userInfo:(UserInfoModel *)userInfo {
///TODO
[[XPIMManager shareManager].microQueueManager setCurrentUserInfo:userInfo];
// [[XPIMManager shareManager].microQueueManager setCurrentUserInfo:userInfo];
NIMChatroomEnterRequest *request = [[NIMChatroomEnterRequest alloc] init];
@@ -178,16 +178,16 @@
[extSource setObject:@(userInfo.erbanNo) forKey:@"erbanNo"];
}
NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithObject:extSource forKey:[NSString stringWithFormat:@"%ld", userInfo.uid]];
request.roomExt = [ext objectToJSONString];
request.roomExt = [ext toJSONString];
[[NIMSDK sharedSDK].chatroomManager enterChatroom:request completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom, NIMChatroomMember * _Nullable me) {
NSDictionary *info = (NSDictionary *)[chatroom.ext JSONObject];
NSDictionary *micDictionary = [info[@"micQueue"] JSONObject];
NSDictionary *info = (NSDictionary *)[chatroom.ext toJSONObject];
NSDictionary *micDictionary = [info[@"micQueue"] toJSONString];
///
[[RtcManager instance] enterRoom:roomId];
///
[[XPIMManager shareManager].microQueueManager enterRoomRepairMicQueue:micDictionary];
[[XPIMManager shareManager].microQueueManager fetchRoomQueue:roomId];
// [[XPIMManager shareManager].microQueueManager enterRoomRepairMicQueue:micDictionary];
// [[XPIMManager shareManager].microQueueManager fetchRoomQueue:roomId];
}];
}

View File

@@ -7,7 +7,6 @@
#import <Foundation/Foundation.h>
#import "XPIMRoomInterface.h"
#import "XPIMRoomMicQueueInterface.h"
#import "XPIMChatRoomMemberInterface.h"
NS_ASSUME_NONNULL_BEGIN
@@ -15,8 +14,6 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)shareManager;
///聊天室的管理类
@property (nonatomic,strong, readonly) id<XPIMRoomInterface> chatRoomManager;
///麦序的管理类
@property (nonatomic,strong, readonly) id<XPIMRoomMicQueueInterface> microQueueManager;
///房间成员管理类
@property (nonatomic,strong, readonly) id<XPIMChatRoomMemberInterface> chatRoomMemberManager;
@end

View File

@@ -7,13 +7,10 @@
#import "XPIMManager.h"
#import "XPImRoomImpl.h"
#import "XPIMRoomMicQueueImpl.h"
#import "XPIMChatRoomMemberImpl.h"
@interface XPIMManager ()
///
@property (nonatomic,strong) id<XPIMRoomInterface> chatRoomManager;
///
@property (nonatomic,strong) id<XPIMRoomMicQueueInterface> microQueueManager;
///
@property (nonatomic,strong) id<XPIMChatRoomMemberInterface> chatRoomMemberManager;
@end
@@ -36,14 +33,6 @@
return _chatRoomManager;
}
- (id<XPIMRoomMicQueueInterface>)microQueueManager {
if (!_microQueueManager) {
_microQueueManager = [[XPIMRoomMicQueueImpl alloc] init];
}
return _microQueueManager;
}
- (id<XPIMChatRoomMemberInterface>)chatRoomMemberManager {
if (!_chatRoomMemberManager) {
_chatRoomMemberManager = [[XPIMChatRoomMemberImpl alloc] init];

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/9/13.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface ThirdUserInfo : BaseObject
@interface ThirdUserInfo : NSObject
///用户名
@property (nonatomic,copy) NSString *userName;
///头像的地址

View File

@@ -34,6 +34,8 @@ static NSString *const YYFlutterPushNavitePagePaymentPwd = @"paymentPwd";
static NSString *const YYFlutterPushNavitePageBindPaymentPwd = @"bindPaymentPwd";
///跳转Webview
static NSString *const YYFlutterPushNavitePageWebview = @"openWebview";
///跳转房间
static NSString *const YYFlutterPushNavitePageChatRoom = @"chatRoom";
#pragma mark - navite跳转flutter页面
#endif /* XCFlutterKeyConst_h */

View File

@@ -12,6 +12,7 @@
#import "XplanFlutterBoostDelegate.h"
#import "XCFlutterKeyConst.h"
#import "XPWebViewController.h"
#import "XPRoomViewController.h"
#import "XPHtmlUrl.h"
#import "XplanFBFlutterViewContainer.h"
@@ -72,7 +73,12 @@
- (UIViewController *)getNaviteClassNameWithPageName:(NSString *)pageName arguments:(NSDictionary *)arguments {
if ([pageName isEqualToString:YYFlutterPushNavitePageCharge]) {
return [[NSClassFromString(@"XPMineRechargeViewController") alloc] init];
} else
} else if ([pageName isEqualToString:YYFlutterPushNavitePageChatRoom]) {
XPRoomViewController* room = [[XPRoomViewController alloc]init];
room.roomUid = arguments[@"chatRoomID"];
room.roomUid = @"1004699";
return room;
}
// if([pageName isEqualToString:YYFlutterPushNavitePageBindPaymentPwd]){
// return [[NSClassFromString(@"TTPayPwdViewController") alloc] init];;
// } else if([pageName isEqualToString:YYFlutterPushNavitePageBindGameAccount]){

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/9/24.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface RechargeListModel : BaseObject
@interface RechargeListModel : NSObject
///充值的id
@property(nonatomic, strong) NSString *chargeProdId;
@property(nonatomic, strong) NSString *prodName;

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/9/26.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface WalletInfoModel : BaseObject
@interface WalletInfoModel : NSObject
/// 用户 uid
@property(nonatomic, assign) NSInteger uid;
/// 钻石数量

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/9/17.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPMineNotificationItemModel : BaseObject
@interface XPMineNotificationItemModel : NSObject
/// 标题
@property (nonatomic, copy) NSString *title;
/// 描述

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/9/17.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPMineNotifyStatus : BaseObject
@interface XPMineNotifyStatus : NSObject
///系统消息通知
@property (nonatomic, assign) BOOL sysMsgNotify;
@end

View File

@@ -11,7 +11,7 @@
///Tool
#import "AccountInfoStorage.h"
#import "YYUtility.h"
#import "NSObject+JSONString.h"
#import "NSObject+MJExtension.h"
///P
#import "XPMineRechargeProtocol.h"
///Model
@@ -73,7 +73,7 @@
///
/// @param transcations
- (void)checkTranscationIds:(NSArray *)transcations {
NSString * transcationIdStr = [transcations objectToJSONString];
NSString * transcationIdStr = [transcations toJSONString];
[Api requestCheckTranscationIds:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] checkTranscationIdsSuccess];
}] transcationIdStr:transcationIdStr];

View File

@@ -16,7 +16,7 @@
#import "XPIAPHelper.h"
#import "RechargeStorage.h"
#import "AccountInfoStorage.h"
#import "NSObject+JSONString.h"
#import "NSObject+MJExtension.h"
///Model
#import "RechargeListModel.h"
///View
@@ -135,7 +135,7 @@
[dictionary setObject:transactionIdentifier forKey:@"transcationId"];
[dictionary setObject:encodeStr forKey:@"recipt"];
[dictionary setObject:self.orderId forKey:@"orderId"];
NSString *reciptJson = [dictionary objectToJSONString];
NSString *reciptJson = [dictionary toJSONString];
NSString * uid = [AccountInfoStorage instance].getUid;
BOOL saveSuccess = [RechargeStorage saveTranscationId:transactionIdentifier recipt:reciptJson uid:uid];
if (!saveSuccess) {

View File

@@ -5,7 +5,7 @@
// Created by 冯硕 on 2021/10/18.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
#import "XPEnum.h"
NS_ASSUME_NONNULL_BEGIN
@@ -14,7 +14,7 @@ typedef NS_ENUM(NSInteger, RoomType) {
};
@interface RoomInfoModel : BaseObject
@interface RoomInfoModel : NSObject
@property (nonatomic , copy) NSString * nick;
@property (nonatomic , assign) NSInteger uid;
@property (nonatomic , assign) NSInteger isRecom;

View File

@@ -9,8 +9,9 @@
#import "RoomInfoModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomPresenter : BaseMvpPresenter
@class UserInfoModel;
@interface XPRoomPresenter : BaseMvpPresenter
/// 获取用户信息
- (void)getUserInfoWithUid:(NSString *)uid;
@@ -19,6 +20,8 @@ NS_ASSUME_NONNULL_BEGIN
/// @param uid 进入的房间的uid
- (void)getRoomInfoWithUid:(NSString *)uid;
- (void)enterNIMRoom:(NSString *)roomId user:(UserInfoModel*)userInfo;
/// 开启用户自己的房间
/// @param title 房间标题
/// @param type 房间类型

View File

@@ -11,9 +11,12 @@
#import "UserInfoModel.h"
///Tool
#import "AccountInfoStorage.h"
#import "NSObject+MJExtension.h"
///P
#import "XPRoomProtocol.h"
#import <NIMSDK/NIMSDK.h>
@implementation XPRoomPresenter
@@ -40,6 +43,28 @@
} showLoading:YES errorToast:NO] uid:uid intoUid:intoUid];
}
- (void)enterNIMRoom:(NSString *)roomId user:(UserInfoModel *)userInfo {
NIMChatroomEnterRequest *request = [[NIMChatroomEnterRequest alloc] init];
request.roomId = roomId;
//ext
NSMutableDictionary *extSource = [NSMutableDictionary dictionary];
//defUser
if (userInfo) {
[extSource setObject:@(userInfo.defUser) forKey:@"defUser"];
[extSource setObject:@(userInfo.erbanNo) forKey:@"erbanNo"];
}
NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithObject:extSource forKey:[NSString stringWithFormat:@"%ld", userInfo.uid]];
request.roomExt = [ext toJSONString];
[[NIMSDK sharedSDK].chatroomManager enterChatroom:request completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom, NIMChatroomMember * _Nullable me) {
if (error) {
[[self getView] enterRoomFail];
} else {
[[self getView] enterRoomSuccess];
}
}];
}
///
/// @param title

View File

@@ -17,7 +17,9 @@ NS_ASSUME_NONNULL_BEGIN
- (void)getRoomInfoSuccess:(RoomInfoModel *)roomInfo;
///开启房间成功
- (void)openRoomSuccess:(RoomInfoModel *)roomInfo;
///进入房间失败(当前获取用户信息、获取房间信息、开启房间失败,均会导致进房失败)
///进入房间成功
- (void)enterRoomSuccess;
///进入房间失败(当前获取用户信息、获取房间信息、开启房间、进入云信房间失败,均会导致进房失败)
- (void)enterRoomFail;
@end

View File

@@ -5,11 +5,11 @@
// Created by 冯硕 on 2021/10/27.
// 解析message 的扩展的模型
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
#import "UserLevelVo.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPMessageRemoteExtModel : BaseObject
@interface XPMessageRemoteExtModel : NSObject
///魅力等级
@property (nonatomic,copy) NSString *charmUrl;
///

View File

@@ -1,25 +0,0 @@
//
// XPRoomPositionDataSourceProtocol.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class MicroQueueItemModel;
@protocol XPRoomPositionDataSourceProtocol <NSObject>
@optional;
///为坑位的昵称赋值
- (void)configNormalPositionItem:(int)position;
///赋值给item
- (void)configPositionItem:(MicroQueueItemModel *)model;
///坑位用户正在说话
- (void)itemUserSpeaking;
///获取当前的item的坑位数
- (int)getItemPosition;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,16 +0,0 @@
//
// XPRoomPositionDataSourceImpl.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import <Foundation/Foundation.h>
#import "XPRoomPositionDelgate.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomPositionDelegateImpl : NSObject<XPRoomPositionDelgate>
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,44 +0,0 @@
//
// XPRoomPositionDataSourceImpl.m
// xplan-ios
//
// Created by on 2021/10/15.
//
#import "XPRoomPositionDelegateImpl.h"
#import "TTPopup.h"
#import "XPIMManager.h"
#import "AccountInfoStorage.h"
///Model
#import "UserInfoModel.h"
#import "MicroQueueItemModel.h"
#import "AccountInfoStorage.h"
@implementation XPRoomPositionDelegateImpl
- (void)showManagerMicroSheet:(NSString *)postion {
TTActionSheetConfig *upMic = [TTActionSheetConfig normalTitle:@"上麦" clickAction:^{
[[XPIMManager shareManager].microQueueManager upMic:postion];
}];
TTActionSheetConfig *downMic = [TTActionSheetConfig normalTitle:@"下麦" clickAction:^{
[[XPIMManager shareManager].microQueueManager downMic:postion];
}];
MicroQueueItemModel * micModel = [[XPIMManager shareManager].microQueueManager.microQueue objectForKey:postion];
if (micModel.userInfo && [AccountInfoStorage instance].getUid.integerValue == micModel.userInfo.uid) {
[TTPopup actionSheetWithItems:@[downMic]];
} else {
[TTPopup actionSheetWithItems:@[upMic]];
}
}
#pragma mark - XPRoomPositionDelgate
- (void)didClickPositionItem:(NSString *)postion {
[self showManagerMicroSheet:postion];
}
@end

View File

@@ -1,19 +0,0 @@
//
// XPRoomPositionDelgate.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/22.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol XPRoomPositionDelgate <NSObject>
///点击了某个item
- (void)didClickPositionItem:(NSString *)postion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,19 +0,0 @@
//
// XPRoomPositionLayoutImpl.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import <Foundation/Foundation.h>
///P
#import "XPRoomPositionLayoutProtocol.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomPositionLayoutImpl : NSObject<XPRoomPositionLayoutProtocol>
- (CGFloat)getPositionViewHeight;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,131 +0,0 @@
//
// XPRoomPositionLayoutImpl.m
// xplan-ios
//
// Created by on 2021/10/15.
//
#import "XPRoomPositionLayoutImpl.h"
///Tool
#import "XPMacro.h"
///View
#import "XCRoomPostionNickView.h"
@implementation XPRoomPositionLayoutImpl
///item
- (int)numberOfItems {
return 9;
}
///itemclass
- (Class)classOfPositionItme {
return [XCRoomPostionNickView class];
}
///item
- (NSArray<NSValue *> *)getPositionItemsCenter {
int number = [self numberOfItems];
CGSize itemSize = [self getNormalItemSize];
CGSize ownerSize = [self getOwnerItemSize];
CGFloat lineSpace = [self getItemsLineSpace];
CGFloat interiteSpace = [self getItemsInteritemSpace];
CGFloat ownerItemMaxY = ownerSize.height + [self getOwnerItemToNormalItemHeight];
CGPoint ownerCenter = CGPointMake(KScreenWidth / 2, ownerSize.height / 2);
NSMutableArray* itemArray = [NSMutableArray arrayWithCapacity:number];
NSValue * ownerCenterValue = [NSValue valueWithCGPoint:ownerCenter];
[itemArray addObject:ownerCenterValue];
for (int i = 1; i < number; i++) {
CGPoint itemCenter = CGPointZero;
if (i <= 4) {
itemCenter = CGPointMake(itemSize.width / 2 + (itemSize.width + interiteSpace) * (i -1), ownerItemMaxY + itemSize.height/ 2);
} else {
itemCenter = CGPointMake(itemSize.width / 2 + (itemSize.width + interiteSpace) * (i -1), ownerItemMaxY + itemSize.height/ 2 + itemSize.height + lineSpace);
}
NSValue * itemCenterValue = [NSValue valueWithCGPoint:itemCenter];
[itemArray addObject:itemCenterValue];
}
return itemArray;
}
///item
- (NSArray<NSValue *> *)getPositionItemsRect {
int number = [self numberOfItems];
CGSize itemSize = [self getNormalItemSize];
CGSize ownerSize = [self getOwnerItemSize];
CGFloat lineSpace = [self getItemsLineSpace];
CGFloat interiteSpace = [self getItemsInteritemSpace];
CGFloat ownerItemMaxY = [self getOwnerItemSize].height + [self getOwnerItemToNormalItemHeight];
NSMutableArray* itemArray = [NSMutableArray arrayWithCapacity:number];
CGRect ownerRect = CGRectMake((KScreenWidth - 40)/2 - ownerSize.width / 2, 0, ownerSize.width, ownerSize.height);
NSValue * ownerFrameValue = [NSValue valueWithCGRect:ownerRect];
[itemArray addObject:ownerFrameValue];
for (int i = 1; i < number; i++) {
CGPoint itemOrigin = CGPointZero;
if (i <= 4) {
itemOrigin = CGPointMake((itemSize.width + interiteSpace) * (i -1), ownerItemMaxY);
} else {
itemOrigin = CGPointMake((itemSize.width + interiteSpace) * (i-4 -1), ownerItemMaxY + itemSize.height + lineSpace);
}
CGRect itemRect = CGRectMake(itemOrigin.x, itemOrigin.y, itemSize.width, itemSize.height);
NSValue * itemRectValue = [NSValue valueWithCGRect:itemRect];
[itemArray addObject:itemRectValue];
}
return itemArray;
}
#pragma mark - Public Method
- (CGFloat)getPositionViewHeight {
CGFloat height = 0;
CGSize itemSize = [self getNormalItemSize];
CGSize ownerSize = [self getOwnerItemSize];
CGFloat lineSpace = [self getItemsLineSpace];
int numberLine =([self numberOfItems] -1)/ [self numberOfItemInLine];
height = ownerSize.height +(itemSize.height + lineSpace) * numberLine + [self getOwnerItemToNormalItemHeight];
return height;
}
#pragma mark - Private Method
///
- (CGSize)getOwnerItemSize {
return CGSizeMake(58 + 5, 58 + 12 + 6 + 5);
}
///
- (CGSize)getNormalItemSize {
CGFloat itemWidth = 55 + 5;
return CGSizeMake(itemWidth, itemWidth + 12 + 6);
}
///
- (CGFloat)getItemsLineSpace {
return 15;
}
///
- (CGFloat)getItemsInteritemSpace {
int number= [self numberOfItemInLine];
CGFloat itemWidth = (KScreenWidth - 40 - [self getNormalItemSize].width * number) / (number - 1);
return itemWidth;
}
///
- (UIEdgeInsets)getContainerEsgeInsets {
return UIEdgeInsetsMake(0, 20, 0, 20);
}
///itemitem
- (CGFloat)getOwnerItemToNormalItemHeight {
return 33;
}
///item
- (int)numberOfItemInLine {
return 4;
}
@end

View File

@@ -1,27 +0,0 @@
//
// XPRoomPositionLayoutProtocol.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol XPRoomPositionLayoutProtocol <NSObject>
///多少个item
- (int)numberOfItems;
///一列有几个item
- (int)numberOfItemInLine;
///item的class 所有的坑位的样式是相同的 如果不同的话 在做
- (Class)classOfPositionItme;
///获取所有item的布局
- (NSArray<NSValue *> *)getPositionItemsCenter;
///获取所有item的布局
- (NSArray<NSValue *> *)getPositionItemsRect;
///获取容器外部的间隙
- (UIEdgeInsets)getContainerEsgeInsets;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,16 +0,0 @@
//
// XCRoomPostionNickView.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import "XPRoomPostionBaseItemView.h"
NS_ASSUME_NONNULL_BEGIN
@interface XCRoomPostionNickView : XPRoomPostionBaseItemView
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,139 +0,0 @@
//
// XCRoomPostionNickView.m
// xplan-ios
//
// Created by on 2021/10/15.
//
#import "XCRoomPostionNickView.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor.h"
#import "UIImageView+LoadImage.h"
///Model
#import "MicroQueueItemModel.h"
#import "MicroModel.h"
#import "UserInfoModel.h"
@interface XCRoomPostionNickView ()
///
@property (nonatomic,strong) UIStackView *stackView;
///
@property (nonatomic,strong) UILabel *postionLabel;
////
@property (nonatomic,strong) UILabel *nickLabel;
@end
@implementation XCRoomPostionNickView
- (void)initSubViews {
[super initSubViews];
[self addSubview:self.stackView];
[self.stackView addArrangedSubview:self.postionLabel];
[self.stackView addArrangedSubview:self.nickLabel];
}
- (void)initSubViewConstraints {
[super initSubViewConstraints];
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.mas_equalTo(self.avatarImageView.mas_bottom).offset(7);
}];
[self.postionLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(14);
}];
}
#pragma mark - Private Method
- (void)configItemStatus:(MicroModel *)micState {
self.micStateImageView.hidden = micState.micState == MicroMicStateType_Open;
if (micState.posState == MicroPosStateType_Free) {
self.avatarImageView.image = [UIImage imageNamed:@"room_position_normal"];
} else {
self.avatarImageView.image = [UIImage imageNamed:@"room_position_lock"];
}
self.postionLabel.text = [NSString stringWithFormat:@"%d", micState.position + 1];
}
- (void)confiItemAvatarNick:(UserInfoModel *)userInfo {
self.nickLabel.text = @"号坑位";
if (userInfo) {
[self.avatarImageView load_imageWithUrl:userInfo.avatar placeholderImage:[UIImageConstant defaultAvatarPlaceholder]];
if (userInfo.gender == GenderType_Male) {
[self.postionLabel setBackgroundColor:[ThemeColor positionMaleNickBackColor]];
} else if(userInfo.gender == GenderType_Female){
[self.postionLabel setBackgroundColor:[ThemeColor positionFemaleNickBackColor]];
}
if (userInfo.nick.length > 0) {
self.nickLabel.text = userInfo.nick;
}
} else {
[self.postionLabel setBackgroundColor:[ThemeColor positionNormalNickBackColor]];
}
}
#pragma mark - XPRoomPositionDataSourceProtocol
- (void)configNormalPositionItem:(int)position {
self.position = position;
if (position == 0) {
self.postionLabel.hidden = YES;
self.nickLabel.hidden = YES;
} else {
self.postionLabel.hidden = NO;
self.nickLabel.hidden = NO;
self.postionLabel.text = [NSString stringWithFormat:@"%d", position];
self.nickLabel.text = @"号麦位";
}
}
- (void)configPositionItem:(MicroQueueItemModel *)model {
MicroModel * micStats = model.microState;
UserInfoModel * userInfo = model.userInfo;
[self configItemStatus:micStats];
[self confiItemAvatarNick:userInfo];
}
#pragma mark - Getters And Setters
- (UILabel *)nickLabel {
if (!_nickLabel) {
_nickLabel = [[UILabel alloc] init];
_nickLabel.font = [UIFont systemFontOfSize:11];
_nickLabel.textColor = [ThemeColor mainTextColor];
_nickLabel.textAlignment = NSTextAlignmentCenter;
}
return _nickLabel;
}
- (UIStackView *)stackView {
if (!_stackView) {
_stackView = [[UIStackView alloc] init];
_stackView.axis = UILayoutConstraintAxisHorizontal;
_stackView.distribution = UIStackViewDistributionFill;
_stackView.alignment = UIStackViewAlignmentCenter;
_stackView.spacing = 2;
}
return _stackView;
}
- (UILabel *)postionLabel {
if (!_postionLabel) {
_postionLabel = [[UILabel alloc] init];
_postionLabel.font = [UIFont systemFontOfSize:10];
_postionLabel.textAlignment = NSTextAlignmentCenter;
_postionLabel.textColor = [ThemeColor mainTextColor];
_postionLabel.layer.masksToBounds = YES;
_postionLabel.layer.cornerRadius = 7;
[_postionLabel setBackgroundColor:[ThemeColor positionNormalNickBackColor]];
}
return _postionLabel;
}
@end

View File

@@ -1,25 +0,0 @@
//
// XPRoomPostionBaseItemView.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import <UIKit/UIKit.h>
#import "XPRoomPositionDataSourceProtocol.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomPostionBaseItemView : UIView<XPRoomPositionDataSourceProtocol>
///头像
@property (nonatomic,strong, readonly) UIImageView *avatarImageView;
///坑位是否闭麦的
@property (nonatomic,strong, readonly) UIImageView *micStateImageView;
///坑位的编号
@property (nonatomic,assign) int position;
- (void)initSubViews;
- (void)initSubViewConstraints;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,106 +0,0 @@
//
// XPRoomPostionBaseItemView.m
// xplan-ios
//
// Created by on 2021/10/15.
//
#import "XPRoomPostionBaseItemView.h"
///Third
#import <Masonry/Masonry.h>
///View
#import "XPRoomPositionItemSpeakingView.h"
@interface XPRoomPostionBaseItemView ()<CAAnimationDelegate>
///
@property (nonatomic,strong) UIImageView *avatarImageView;
///
@property (nonatomic,strong) UIImageView *micStateImageView;
///
@property (nonatomic,strong) XPRoomPositionItemSpeakingView *animationView;
@end
@implementation XPRoomPostionBaseItemView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
- (void)layoutSubviews {
self.avatarImageView.layer.masksToBounds = YES;
self.avatarImageView.layer.cornerRadius = self.frame.size.width / 2;
}
#pragma mark - Public Method
///
- (void)startSpeakingAnimation {
[self.animationView startSpeakingAnimation];
}
///
- (void)stopSpeakingAnimation {
[self.animationView stopSpeakingAnimation];
}
- (void)initSubViews {
[self addSubview:self.animationView];
[self addSubview:self.avatarImageView];
[self addSubview:self.micStateImageView];
}
- (void)initSubViewConstraints {
[self.animationView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.avatarImageView);
}];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.mas_equalTo(self);
make.height.mas_equalTo(self.mas_width);
}];
[self.micStateImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.avatarImageView);
}];
}
#pragma mark - XPRoomPositionDataSourceProtocol
- (void)itemUserSpeaking {
[self startSpeakingAnimation];
}
- (int)getItemPosition {
return self.position;
}
#pragma mark - Getters And Setters
- (UIImageView *)avatarImageView {
if (!_avatarImageView) {
_avatarImageView = [[UIImageView alloc] init];
_avatarImageView.userInteractionEnabled = YES;
_avatarImageView.image = [UIImage imageNamed:@"room_position_normal"];
}
return _avatarImageView;
}
- (UIImageView *)micStateImageView {
if (!_micStateImageView) {
_micStateImageView = [[UIImageView alloc] init];
_micStateImageView.userInteractionEnabled = YES;
_micStateImageView.image = [UIImage imageNamed:@"room_position_mute"];
_micStateImageView.hidden = YES;
}
return _micStateImageView;
}
- (XPRoomPositionItemSpeakingView *)animationView {
if (!_animationView) {
_animationView = [[XPRoomPositionItemSpeakingView alloc] init];
}
return _animationView;
}
@end

View File

@@ -1,19 +0,0 @@
//
// XPRoomPositionView.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import <UIKit/UIKit.h>
#import "XPRoomPositionLayoutProtocol.h"
#import "XPRoomPositionDelgate.h"
#import "RtcManager.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomPositionView : UIView<RtcDelegate>
- (instancetype)initWithFrame:(CGRect)frame layout:(id<XPRoomPositionLayoutProtocol>)layout delegate:(id<XPRoomPositionDelgate>)delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,122 +0,0 @@
//
// XPRoomPositionView.m
// xplan-ios
//
// Created by on 2021/10/15.
//
#import "XPRoomPositionView.h"
///Model
#import "MicroQueueItemModel.h"
#import "UserInfoModel.h"
///Tool
#import "XPIMManager.h"
///P
#import "XPRoomPositionDataSourceProtocol.h"
@interface XPRoomPositionView ()<XPIMRoomMicQueueDelegate>
///UI
@property (nonatomic,strong) id<XPRoomPositionLayoutProtocol> layout;
///item
@property (nonatomic,strong) NSMutableArray *itemArray;
///
@property (nonatomic,strong) id<XPRoomPositionDelgate> delegate;
@end
@implementation XPRoomPositionView
- (void)dealloc {
[[XPIMManager shareManager].microQueueManager removeDelegate:self];
}
- (instancetype)initWithFrame:(CGRect)frame layout:(id<XPRoomPositionLayoutProtocol>)layout delegate:(id<XPRoomPositionDelgate>)delegate {
self = [super initWithFrame:frame];
if (self) {
self.layout = layout;
self.delegate =delegate;
[[XPIMManager shareManager].microQueueManager addDelegate:self];
[self initSubViews];
}
return self;
}
#pragma mark - Response
- (void)didTapItemRecognzier:(UITapGestureRecognizer *)tap {
UIView<XPRoomPositionDataSourceProtocol> * view =(UIView<XPRoomPositionDataSourceProtocol> *)[tap view];
int position = [view getItemPosition];
NSString * micPositon = [NSString stringWithFormat:@"%d", position - 1];
if ([self.delegate respondsToSelector:@selector(didClickPositionItem:)]) {
[self.delegate didClickPositionItem:micPositon];
}
}
#pragma mark - Private Method
- (void)initSubViews {
int number = [self.layout numberOfItems];
NSArray * array = [self.layout getPositionItemsRect];
for (int i = 0; i < number; i++) {
UIView<XPRoomPositionDataSourceProtocol> * view = [self getItemView];
[view configNormalPositionItem:i];
NSValue * rect = [array objectAtIndex:i];
view.frame = rect.CGRectValue;
[self addSubview:view];
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapItemRecognzier:)];
[view addGestureRecognizer:tap];
[self.itemArray addObject:view];
}
}
- (BOOL)positionItemUserIsSeaking:(NSMutableArray *)speakings uid:(NSString *)uid {
BOOL isSpeaking = NO;
for (NSString * speakingUid in speakings) {
if (speakingUid == uid) {
isSpeaking = YES;
break;
}
}
return isSpeaking;
}
#pragma mark - XPRoomPositionLayoutProtocol
- (UIView<XPRoomPositionDataSourceProtocol> *)getItemView {
Class class = [self.layout classOfPositionItme];
return [[class alloc] init];;
}
#pragma mark - XPIMRoomMicQueueDelegate
///
- (void)onGetRoomMicroQueueSuccess:(NSDictionary<NSString *, MicroQueueItemModel *>*)microQueue {
for (int i = 0; i< self.itemArray.count; i++) {
UIView<XPRoomPositionDataSourceProtocol> * view = [self.itemArray objectAtIndex:i];
NSString *position = [NSString stringWithFormat:@"%d",i-1];
MicroQueueItemModel * model = [microQueue objectForKey:position];
[view configPositionItem:model];
}
}
#pragma mark - RtcDelegate
///
- (void)usersSpeaking:(NSMutableArray *)uids {
NSDictionary * microQueue = [XPIMManager shareManager].microQueueManager.microQueue;
for (int i = 0; i< self.itemArray.count; i++) {
UIView<XPRoomPositionDataSourceProtocol> * view = [self.itemArray objectAtIndex:i];
NSString *position = [NSString stringWithFormat:@"%d",i-1];
MicroQueueItemModel * model = [microQueue objectForKey:position];
if (model.userInfo) {
NSString * uid = [NSString stringWithFormat:@"%ld", model.userInfo.uid];
if ([self positionItemUserIsSeaking:uids uid:uid]) {
[view itemUserSpeaking];
}
}
}
}
#pragma mark - Getters And Setters
- (NSMutableArray *)itemArray {
if (!_itemArray) {
_itemArray = [NSMutableArray array];
}
return _itemArray;
}
@end

View File

@@ -1,18 +0,0 @@
//
// XPRoomPositionView.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/11.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class XPRoomPositionView;
@interface XPRoomPositionContainView : UIView
///坑位
@property (nonatomic,strong, readonly) XPRoomPositionView *postionView;
- (CGFloat)positionContainerViewHeight;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,74 +0,0 @@
//
// XPRoomPositionView.m
// xplan-ios
//
// Created by on 2021/10/11.
//
#import "XPRoomPositionContainView.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "XPRoomPositionLayoutImpl.h"
#import "XPRoomPositionDelegateImpl.h"
///View
#import "XPRoomPositionView.h"
@interface XPRoomPositionContainView ()
///
@property (nonatomic,strong) XPRoomPositionView *postionView;
///
@property (nonatomic,strong) XPRoomPositionLayoutImpl *layoutImpl;
///
@property (nonatomic,strong) XPRoomPositionDelegateImpl *delegate;
@end
@implementation XPRoomPositionContainView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - Public Method
- (CGFloat)positionContainerViewHeight {
return [self.layoutImpl getPositionViewHeight];
}
#pragma mark - Private Method
- (void)initSubViews {
[self addSubview:self.postionView];
}
- (void)initSubViewConstraints {
[self.postionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self).inset(20);
make.top.bottom.mas_equalTo(self);
}];
}
#pragma mark - Getters And Setters
- (XPRoomPositionView *)postionView {
if (!_postionView) {
_postionView = [[XPRoomPositionView alloc] initWithFrame:CGRectZero layout:self.layoutImpl delegate:self.delegate];
}
return _postionView;
}
- (XPRoomPositionLayoutImpl *)layoutImpl {
if (!_layoutImpl) {
_layoutImpl = [[XPRoomPositionLayoutImpl alloc] init];
}
return _layoutImpl;
}
- (XPRoomPositionDelegateImpl *)delegate {
if (!_delegate) {
_delegate = [[XPRoomPositionDelegateImpl alloc] init];
}
return _delegate;
}
@end

View File

@@ -0,0 +1,22 @@
//
// RoomDelegate.h
// xplan-ios
//
// Created by apple on 2021/10/26.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class RoomInfoModel;
@class UserInfoModel;
@protocol RoomDelegate <NSObject>
- (RoomInfoModel*)getRoomInfo;
- (UserInfoModel*)getUserInfo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,16 @@
//
// MicroView.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/15.
//
#import <UIKit/UIKit.h>
#import "MicroViewProtocol.h"
NS_ASSUME_NONNULL_BEGIN
@interface MicroView : UIView<MicroViewProtocol>
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,187 @@
//
// MicroView.m
// xplan-ios
//
// Created by on 2021/10/15.
//
#import "MicroView.h"
///Third
#import <Masonry/Masonry.h>
///View
#import "MicroWaveView.h"
#import "UIImageView+LoadImage.h"
#import "ThemeColor.h"
#import "MicroQueueModel.h"
#import "MicroStateModel.h"
#import "UserInfoModel.h"
@interface MicroView ()<CAAnimationDelegate>
///
@property (nonatomic,strong) UIImageView *avatarImageView;
///
@property (nonatomic,strong) UIImageView *micStateImageView;
///
@property (nonatomic,strong) UIStackView *stackView;
///
@property (nonatomic,strong) UILabel *postionLabel;
////
@property (nonatomic,strong) UILabel *nickLabel;
///
@property (nonatomic,strong) MicroWaveView *animationView;
@end
@implementation MicroView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
- (void)layoutSubviews {
self.avatarImageView.layer.masksToBounds = YES;
self.avatarImageView.layer.cornerRadius = self.frame.size.width / 2;
}
- (void)initSubViews {
[self addSubview:self.animationView];
[self addSubview:self.avatarImageView];
[self addSubview:self.micStateImageView];
[self addSubview:self.stackView];
[self.stackView addArrangedSubview:self.postionLabel];
[self.stackView addArrangedSubview:self.nickLabel];
}
- (void)initSubViewConstraints {
[self.animationView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.avatarImageView);
}];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.mas_equalTo(self);
make.height.mas_equalTo(self.mas_width);
}];
[self.micStateImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.avatarImageView);
}];
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.top.mas_equalTo(self.avatarImageView.mas_bottom).offset(7);
}];
[self.postionLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(14);
}];
}
#pragma mark - MicroViewProtocol
- (void)userSpeaking {
[self.animationView startWaveAnimation];
}
- (void)configMicroView:(MicroQueueModel *)model {
MicroStateModel * micStats = model.microState;
UserInfoModel * userInfo = model.userInfo;
[self configMicroState:micStats];
[self configUser:userInfo];
}
- (void)configMicroState:(MicroStateModel *)micState {
self.micStateImageView.hidden = micState.micState == MicroMicStateType_Open;
if (micState.posState == MicroPosStateType_Free) {
self.avatarImageView.image = [UIImage imageNamed:@"room_position_normal"];
} else {
self.avatarImageView.image = [UIImage imageNamed:@"room_position_lock"];
}
self.postionLabel.text = [NSString stringWithFormat:@"%d", micState.position + 1];
}
- (void)configUser:(UserInfoModel *)userInfo {
self.nickLabel.text = @"号坑位";
if (userInfo) {
[self.avatarImageView load_imageWithUrl:userInfo.avatar placeholderImage:[UIImageConstant defaultAvatarPlaceholder]];
if (userInfo.gender == GenderType_Male) {
[self.postionLabel setBackgroundColor:[ThemeColor positionMaleNickBackColor]];
} else if(userInfo.gender == GenderType_Female){
[self.postionLabel setBackgroundColor:[ThemeColor positionFemaleNickBackColor]];
}
if (userInfo.nick.length > 0) {
self.nickLabel.text = userInfo.nick;
}
} else {
[self.postionLabel setBackgroundColor:[ThemeColor positionNormalNickBackColor]];
}
}
#pragma mark - Getters And Setters
- (UIImageView *)avatarImageView {
if (!_avatarImageView) {
_avatarImageView = [[UIImageView alloc] init];
_avatarImageView.userInteractionEnabled = YES;
_avatarImageView.image = [UIImage imageNamed:@"room_position_normal"];
}
return _avatarImageView;
}
- (UIImageView *)micStateImageView {
if (!_micStateImageView) {
_micStateImageView = [[UIImageView alloc] init];
_micStateImageView.userInteractionEnabled = YES;
_micStateImageView.image = [UIImage imageNamed:@"room_position_mute"];
_micStateImageView.hidden = YES;
}
return _micStateImageView;
}
- (MicroWaveView *)animationView {
if (!_animationView) {
_animationView = [[MicroWaveView alloc] init];
}
return _animationView;
}
- (UILabel *)nickLabel {
if (!_nickLabel) {
_nickLabel = [[UILabel alloc] init];
_nickLabel.font = [UIFont systemFontOfSize:11];
_nickLabel.textColor = [ThemeColor mainTextColor];
_nickLabel.textAlignment = NSTextAlignmentCenter;
}
return _nickLabel;
}
- (UIStackView *)stackView {
if (!_stackView) {
_stackView = [[UIStackView alloc] init];
_stackView.axis = UILayoutConstraintAxisHorizontal;
_stackView.distribution = UIStackViewDistributionFill;
_stackView.alignment = UIStackViewAlignmentCenter;
_stackView.spacing = 2;
}
return _stackView;
}
- (UILabel *)postionLabel {
if (!_postionLabel) {
_postionLabel = [[UILabel alloc] init];
_postionLabel.font = [UIFont systemFontOfSize:10];
_postionLabel.textAlignment = NSTextAlignmentCenter;
_postionLabel.textColor = [ThemeColor mainTextColor];
_postionLabel.layer.masksToBounds = YES;
_postionLabel.layer.cornerRadius = 7;
[_postionLabel setBackgroundColor:[ThemeColor positionNormalNickBackColor]];
}
return _postionLabel;
}
@end

View File

@@ -0,0 +1,23 @@
//
// XPRoomPositionDataSourceProtocol.h
// xplan-ios
//
// Created by apple on 2021/10/27.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class MicroQueueModel;
@protocol MicroViewProtocol <NSObject>
///赋值给item
- (void)configMicroView:(MicroQueueModel *)model;
///坑位用户正在说话
- (void)userSpeaking;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,5 +1,5 @@
//
// XPRoomPositionItemSpeakingView.h
// MicroWaveView.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/20.
@@ -9,12 +9,12 @@
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomPositionItemSpeakingView : UIView
@interface MicroWaveView : UIView
///开始展示声波动画
- (void)startSpeakingAnimation;
- (void)startWaveAnimation;
///结束声波动画
- (void)stopSpeakingAnimation;
- (void)stopWaveAnimation;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,24 +1,24 @@
//
// XPRoomPositionItemSpeakingView.m
// MicroWaveView.m
// xplan-ios
//
// Created by on 2021/10/20.
//
#import "XPRoomPositionItemSpeakingView.h"
#import "MicroWaveView.h"
///Third
#import <Masonry/Masonry.h>
#import <POP.h>
@interface XPRoomPositionItemSpeakingView ()
@interface MicroWaveView ()
//
@property (nonatomic,strong) UIView * firstView;
///
//
@property (nonatomic,assign) BOOL isAnimationing;
@end
@implementation XPRoomPositionItemSpeakingView
@implementation MicroWaveView
- (instancetype)initWithFrame:(CGRect)frame
{
@@ -34,10 +34,10 @@
[super layoutSubviews];
self.firstView.layer.cornerRadius = self.frame.size.width / 2;
}
#pragma mark - Public Method
///
- (void)startSpeakingAnimation {
NSLog(@"开始动画");
- (void)startWaveAnimation {
if (self.isAnimationing) {
return;
}
@@ -46,7 +46,7 @@
}
///
- (void)stopSpeakingAnimation {
- (void)stopWaveAnimation {
self.isAnimationing = NO;
[self.firstView.layer removeAllAnimations];
}
@@ -64,7 +64,6 @@
}];
}
- (void)animationWithLayer:(UIView *)view {
int animtionDura = 1;
POPBasicAnimation *animation2 = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerScaleXY];

View File

@@ -1,17 +1,17 @@
//
// MicroQueueItemModel.h
// MicroQueueModel.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/21.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
@class UserInfoModel, MicroModel;
@interface MicroQueueItemModel : BaseObject
@class UserInfoModel, MicroStateModel;
@interface MicroQueueModel : NSObject
///麦序的状态
@property (nonatomic, strong) MicroModel *microState;
@property (nonatomic, strong) MicroStateModel *microState;
///麦序上是否有人
@property (nonatomic, strong, nullable) UserInfoModel *userInfo;
@end

View File

@@ -0,0 +1,12 @@
//
// MicroQueueModel.m
// xplan-ios
//
// Created by on 2021/10/21.
//
#import "MicroQueueModel.h"
@implementation MicroQueueModel
@end

View File

@@ -1,11 +1,11 @@
//
// MicroModel.h
// MicroStateModel.h
// xplan-ios
//
// Created by 冯硕 on 2021/10/21.
//
#import "BaseObject.h"
#import "NSObject+MJExtension.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, MicroPosStateType) {
@@ -19,7 +19,7 @@ typedef NS_ENUM(NSInteger, MicroMicStateType) {
};
@interface MicroModel : BaseObject
@interface MicroStateModel : NSObject
///坑位的序号
@property (nonatomic, assign) int position;
///坑位状态 锁坑/开坑

View File

@@ -0,0 +1,21 @@
//
// MicroStateModel.m
// xplan-ios
//
// Created by on 2021/10/21.
//
#import "MicroStateModel.h"
@implementation MicroStateModel
- (instancetype)init {
self = [super init];
if (self) {
_posState = MicroPosStateType_Free;
_micState = MicroMicStateType_Open;
}
return self;
}
@end

View File

@@ -0,0 +1,16 @@
//
// SocialStageView.h
// xplan-ios
//
// Created by zu on 2021/10/26.
//
#import "StageView.h"
NS_ASSUME_NONNULL_BEGIN
@interface SocialStageView : StageView
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,74 @@
//
// SocialStageView.m
// xplan-ios
//
// Created by zu on 2021/10/26.
//
#import "SocialStageView.h"
#import "MicroView.h"
#import "XPMacro.h"
// 58 + 5
#define ownerWidth (58 + 5)
// 12 6
#define ownerHeight (ownerWidth + 6 + 12)
// 8 55 + 5
#define mcWidth (55 + 5)
#define mcHeight (mcWidth + 6 + 12)
// padding 20
#define paddingH 20
// 33
#define marginV1 33
// 8
#define marginH (KScreenWidth - paddingH * 2 - mcWidth * 4) / 3
//
#define firstRowTop ownerHeight + marginV1
//
#define marginV2 15
//
#define secondRowTop (firstRowTop + mcHeight + marginV2)
@implementation SocialStageView
- (NSInteger)countOfMircoView {
return 9;
}
- (UIView<MicroViewProtocol> *)microViewForIndex:(NSInteger)index {
UIView<MicroViewProtocol> * microView = [super microViewForIndex:index];
if (microView) {
return microView;
}
return [[MicroView alloc]init];
}
/**
* | | * 58 + 5
* | 33 | * 33
* | 20 20 | * padding 20
* | 15 | * 15
* | | * 8 55 + 5
* * 12 6
*/
- (CGRect)rectForViewAtIndex:(NSInteger)index {
if (index == 0) {
return CGRectMake(KScreenWidth / 2 - ownerWidth / 2, 0, ownerWidth, ownerHeight);
}
if (index >= 1 && index <= 4) {
return CGRectMake(paddingH + (mcWidth + marginH) * (index - 1), firstRowTop, mcWidth, mcHeight);
}
if (index >= 5 && index <= 9) {
return CGRectMake(paddingH + (mcWidth + marginH) * (index - 4 - 1), secondRowTop, mcWidth, mcHeight);
}
return [super rectForViewAtIndex:index];
}
- (CGFloat)hightForStageView {
return ownerHeight + marginV1 + mcHeight + marginH + mcHeight;
}
@end

View File

@@ -0,0 +1,45 @@
//
// StageView.h
// xplan-ios
//
// Created by zu on 2021/10/25.
//
#import <UIKit/UIKit.h>
#import "RoomDelegate.h"
#import "MicroViewProtocol.h"
NS_ASSUME_NONNULL_BEGIN
@class MicroQueueModel;
@protocol StageViewDelegate
/**
* 坑位数目
*/
- (NSInteger)countOfMircoView;
/**
* 坑位区域的高度(宽度默认屏幕宽度)
*/
- (CGFloat)hightForStageView;
/**
* index 处的坑位
*/
- (UIView<MicroViewProtocol> *)microViewForIndex:(NSInteger)index;
/**
* index 处的坑位的区域
*/
- (CGRect)rectForViewAtIndex:(NSInteger)index;
/**
* index 处的坑位点击事件
*/
- (void)didSelectAtIndex:(NSInteger)index;
@end
@interface StageView : UIView<StageViewDelegate>
@property (nonatomic, strong) id<RoomDelegate> hostDelegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,339 @@
//
// StageView.m
// xplan-ios
//
// Created by zu on 2021/10/25.
//
#import "StageView.h"
#import <Masonry/Masonry.h>
#import <NIMSDK/NIMSDK.h>
#import "RtcManager.h"
#import "RtcDelegate.h"
#import "RoomInfoModel.h"
#import "UserInfoModel.h"
#import "MicroStateModel.h"
#import "MicroQueueModel.h"
#import "NSObject+MJExtension.h"
#import "TTPopup.h"
@interface StageView()<RtcDelegate, NIMChatManagerDelegate>
/** position index
*
* **Note:**
*
* position -1
* - 使MicroStateModelself.micQueue
*
* View index 0 使MicroStateModelself.micQueue
* - 使StageViewDelegateself.microViews
*/
@property (nonatomic, strong) NSMutableArray *microViews;
@property (nonatomic, strong) NSMutableDictionary<NSString *, MicroQueueModel *> *micQueue;
@end
@implementation StageView
- (instancetype)init {
self = [super init];
if (self) {
NSInteger microCount = self.countOfMircoView;
for (int i = 0; i < microCount; i++) {
UIView* microView = [self microViewForIndex:i];
if (microView) {
microView.tag = i;
microView.frame = [self rectForViewAtIndex:i];
[self addSubview:microView];
UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(microViewTapped:)];
[microView addGestureRecognizer:tap];
[self.microViews insertObject:microView atIndex:i];
}
}
[self microQueueUpdated];
[self mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(self.hightForStageView);
}];
}
return self;
}
/**
* hostDelegate
*
*/
- (void)setHostDelegate:(id<RoomDelegate>)hostDelegate {
if (_hostDelegate) {
return;
}
_hostDelegate = hostDelegate;
[self initRtcRoom];
}
- (void)initRtcRoom {
RoomInfoModel* roomInfo = self.hostDelegate.getRoomInfo;
// 1.
RtcEngineType type = [roomInfo.audioSdkType isEqualToString:@"wujie"] ? RtcEngineType_WJ : ([roomInfo.audioSdkType isEqualToString:@"zego"] ? RtcEngineType_Zego : RtcEngineType_Agora);
[RtcManager initEngineWithType:type delegate:self];
[[RtcManager instance] enterRoom:[NSString stringWithFormat:@"%ld", (long)roomInfo.uid]];
// 2. self.micQueue
[[NIMSDK sharedSDK].chatManager addDelegate:self];
[[NIMSDK sharedSDK].chatroomManager fetchChatroomInfo:[NSString stringWithFormat:@"%ld", (long)roomInfo.roomId] completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom) {
if (error) {
return;
}
NSDictionary *info = (NSDictionary *)[chatroom.ext toJSONObject];
NSDictionary *micState = [info[@"micQueue"] toJSONObject];
for (NSString *position in micState.allKeys) {
MicroStateModel *state = [MicroStateModel modelWithJSON:micState[position]];
MicroQueueModel *sequence = [self.micQueue objectForKey:position];
sequence.microState = state;
}
[self microQueueUpdated];
}];
// 3. self.micQueue
[[NIMSDK sharedSDK].chatroomManager fetchChatroomQueue:[NSString stringWithFormat:@"%ld", (long)roomInfo.roomId] completion:^(NSError * _Nullable error, NSArray<NSDictionary<NSString *,NSString *> *> * _Nullable info) {
if (error) {
return;
}
for (NSDictionary *item in info) {
UserInfoModel *userInfo = [UserInfoModel modelWithJSON:item.allValues.firstObject];
NSString *position = item.allKeys.firstObject;
MicroQueueModel *sequence = [self.micQueue objectForKey:position];
sequence.userInfo = userInfo;
}
[self microQueueUpdated];
}];
}
#pragma mark - microQueueUpdated
/**
*
*
* **Note:** self.micQueue
*/
- (void)microQueueUpdated {
bool selfOnMicro = NO;
for (int i = 0; i < self.countOfMircoView; i++) {
UIView<MicroViewProtocol> * view = [self findMicroViewByIndex:i];
MicroQueueModel * model = [self.micQueue objectForKey:[self indexToPosition:i]];
[view configMicroView:model];
if (model.userInfo.uid == self.hostDelegate.getUserInfo.uid) {
selfOnMicro = YES;
}
}
[[RtcManager instance] broadcast:selfOnMicro];
}
#pragma mark - RtcDelegate -
- (void)usersSpeaking:(NSMutableArray *)uids {
for (NSString* uid in uids) {
UIView<MicroViewProtocol>* microView = [self findMicroViewByUid:uid];
if (microView) {
[microView userSpeaking];
}
}
}
#pragma mark - NIMChatManagerDelegate - /
- (void)onRecvMessages:(NSArray<NIMMessage *> *)messages {
bool microQueueChanged = NO;
for (NIMMessage * message in messages) {
//
if (message.session.sessionType != NIMSessionTypeChatroom) {
continue;
}
//
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]]) {
continue;
}
if (message.messageType == NIMMessageTypeNotification) {
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
switch (content.eventType) {
case NIMChatroomEventTypeInfoUpdated: //
{
NSDictionary *data = [content.notifyExt toJSONObject];
int type = [data[@"type"] intValue];
switch (type) {
case 2:
case 3: ///
{
MicroStateModel *microState = [MicroStateModel modelWithJSON:data[@"micInfo"]];
MicroQueueModel *micSequence = [self.micQueue objectForKey:[NSString stringWithFormat:@"%d", microState.position]];
micSequence.microState = microState;
microQueueChanged = YES;
}
break;
}
}
break;
case NIMChatroomEventTypeQueueChange: //
{
NSDictionary* data = (NSDictionary *)content.ext;
NSString* position = [data objectForKey:NIMChatroomEventInfoQueueChangeItemKey];
UserInfoModel* userInfo = [UserInfoModel modelWithJSON:[data objectForKey:NIMChatroomEventInfoQueueChangeItemValueKey]];
NSInteger changeType = [data[NIMChatroomEventInfoQueueChangeTypeKey] integerValue];
//
for (MicroQueueModel *sequence in self.micQueue.allValues) {
if (userInfo.uid == sequence.userInfo.uid) {
sequence.userInfo = nil;
}
}
if (changeType == 1) { //
MicroQueueModel *sequence = [self.micQueue objectForKey:position];
sequence.userInfo = userInfo;
}
microQueueChanged = YES;
}
break;
default:
break;
}
}
}
if (microQueueChanged) {
[self microQueueUpdated];
}
}
#pragma mark - StageViewDelegate - View
- (void)didSelectAtIndex:(NSInteger)index {
MicroQueueModel* micModel = [self.micQueue objectForKey:[self indexToPosition:index]];
UserInfoModel* userInfo = self.hostDelegate.getUserInfo;
RoomInfoModel* roomInfo = self.hostDelegate.getRoomInfo;
NSString* pisition = [self indexToPosition:index];
NSString* roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
TTActionSheetConfig *upMic = [TTActionSheetConfig normalTitle:@"上麦" clickAction:^{
NIMChatroomQueueUpdateRequest *request = [[NIMChatroomQueueUpdateRequest alloc]init];
request.key = pisition;
request.value = [userInfo toJSONString];
request.roomId = roomId;
request.transient = YES;
[[NIMSDK sharedSDK].chatroomManager updateChatroomQueueObject:request completion:^(NSError * _Nullable error) {
if (error) {
}
}];
}];
TTActionSheetConfig *downMic = [TTActionSheetConfig normalTitle:@"下麦" clickAction:^{
NIMChatroomQueueRemoveRequest *request = [[NIMChatroomQueueRemoveRequest alloc]init];
request.key = pisition;
request.roomId = roomId;
[[NIMSDK sharedSDK].chatroomManager removeChatroomQueueObject:request completion:^(NSError * _Nullable error, NSDictionary<NSString *,NSString *> * _Nullable element) {
if (error) {
}
}];
}];
if (!micModel.userInfo && micModel.microState.posState == MicroPosStateType_Free) {
[TTPopup actionSheetWithItems:@[upMic]];
} else if (self.hostDelegate.getUserInfo.uid == micModel.userInfo.uid) {
[TTPopup actionSheetWithItems:@[downMic]];
} else {
// TODO:
}
}
- (NSInteger)countOfMircoView {
return 0;
}
- (CGFloat)hightForStageView {
return 0;
}
- (nonnull UIView *)microViewForIndex:(NSInteger)index {
return [self findMicroViewByIndex:index];
}
- (CGRect)rectForViewAtIndex:(NSInteger)index {
return CGRectZero;
}
#pragma mark - Private Utils Methods -
/**
* index
*/
- (NSInteger)positionToIndex:(NSString*)position {
return position.intValue + 1;
}
/**
* index
*/
- (NSString *)indexToPosition:(NSInteger)index {
return [NSString stringWithFormat:@"%ld", (long)(index - 1)];
}
/**
* uid View nil
*/
- (UIView<MicroViewProtocol> *)findMicroViewByUid:(NSString *)uid {
for (int i = 0; i < self.countOfMircoView; i++) {
MicroQueueModel* mode = [self.micQueue objectForKey:[self indexToPosition:i]];
if (mode.userInfo && mode.userInfo.uid == uid.intValue) {
return [self findMicroViewByIndex:i];
}
}
return nil;
}
/**
* index View nil
*/
- (UIView<MicroViewProtocol> *)findMicroViewByIndex:(NSInteger)index {
if (self.microViews && self.microViews.count > index) {
return [self.microViews objectAtIndex:index];
}
return nil;
}
/**
* position View nil
*/
- (UIView<MicroViewProtocol> *)findMicroViewByPosition:(NSString *)position {
return [self findMicroViewByIndex:[self positionToIndex:position]];
}
/**
*
*/
- (void)microViewTapped:(UITapGestureRecognizer *)sender {
[self didSelectAtIndex:sender.view.tag];
}
- (NSMutableArray *)microViews {
if (!_microViews) {
_microViews = [NSMutableArray arrayWithCapacity:self.countOfMircoView];
}
return _microViews;
}
- (NSMutableDictionary<NSString *, MicroQueueModel *> *)micQueue {
if (!_micQueue) {
_micQueue= [NSMutableDictionary dictionary];
for (int i = 0; i < self.countOfMircoView; i++) {
NSString* position = [self indexToPosition:i];
MicroQueueModel *micSequence = [[MicroQueueModel alloc]init];
micSequence.userInfo = nil;
micSequence.microState = [[MicroStateModel alloc]init];
micSequence.microState.position = [position intValue];
[self.micQueue setObject:micSequence forKey:position];
}
}
return _micQueue;
}
@end

View File

@@ -8,7 +8,7 @@
#import "MvpViewController.h"
NS_ASSUME_NONNULL_BEGIN
@class XPRoomBackContainerView,XPRoomInfoContainerView,XPRoomMessageContainerView,XPRoomMenuContainerView,XPRoomActivityContainerView, XPRoomPositionContainView, RoomInfoModel, UserInfoModel;
@class XPRoomBackContainerView,XPRoomInfoContainerView,XPRoomMessageContainerView,XPRoomMenuContainerView,XPRoomActivityContainerView, XPRoomPositionContainView, RoomInfoModel, UserInfoModel, SocialStageView;
@interface XPRoomViewController : MvpViewController
///房间的Uid
@@ -19,7 +19,7 @@ NS_ASSUME_NONNULL_BEGIN
///房间信息
@property (nonatomic,strong, readonly) XPRoomInfoContainerView *roomInfoContainerView;
///坑位信息
@property (nonatomic,strong, readonly) XPRoomPositionContainView *positionContainerView;
@property (nonatomic,strong, readonly) SocialStageView *stageView;
///公屏
@property (nonatomic,strong, readonly) XPRoomMessageContainerView *messageContainerView;
///底部操作栏
@@ -29,7 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
///房间信息
@property (nonatomic,strong, readonly) RoomInfoModel *roomInfo;
///用户信息
@property (nonatomic,strong, readonly) UserInfoModel *usereInfo;
@property (nonatomic,strong, readonly) UserInfoModel *userInfo;
@end

View File

@@ -20,32 +20,34 @@
#import "XPRoomBackContainerView.h"
#import "XPRoomMenuContainerView.h"
#import "XPRoomMessageContainerView.h"
#import "XPRoomPositionContainView.h"
#import "XPRoomInfoContainerView.h"
#import "SocialStageView.h"
///P
#import "XPRoomPresenter.h"
#import "XPRoomProtocol.h"
#import "XPIMRoomDelegate.h"
#import "RoomDelegate.h"
///Category
#import "XPRoomViewController+RoomInfoContainerView.h"
#import "XPIMManager.h"
@interface XPRoomViewController ()<XPRoomProtocol, XPIMRoomDelegate>
@interface XPRoomViewController ()<XPRoomProtocol, XPIMRoomDelegate, RoomDelegate>
///
@property (nonatomic,strong) XPRoomBackContainerView *backContainerView;
///
@property (nonatomic,strong) XPRoomInfoContainerView *roomInfoContainerView;
///
@property (nonatomic,strong) XPRoomPositionContainView *positionContainerView;
@property (nonatomic,strong) SocialStageView *stageView;
///
@property (nonatomic,strong) XPRoomMessageContainerView *messageContainerView;
///
@property (nonatomic,strong) XPRoomMenuContainerView *menuContainerView;
///
@property (nonatomic,strong) XPRoomActivityContainerView *activityContainerView;
///
@property (nonatomic,strong) UserInfoModel *usereInfo;
@property (nonatomic,strong) UserInfoModel *userInfo;
///
@property (nonatomic,strong) RoomInfoModel *roomInfo;
@end
@@ -87,7 +89,7 @@
- (void)initSubViews {
[self.view addSubview:self.backContainerView];
[self.view addSubview:self.roomInfoContainerView];
[self.view addSubview:self.positionContainerView];
[self.view addSubview:self.stageView];
[self.view addSubview:self.messageContainerView];
[self.view addSubview:self.menuContainerView];
[self.view addSubview:self.activityContainerView];
@@ -103,14 +105,13 @@
make.height.mas_equalTo(kNavigationHeight);
}];
[self.positionContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
[self.stageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.top.mas_equalTo(self.roomInfoContainerView.mas_bottom);
make.height.mas_equalTo([self.positionContainerView positionContainerViewHeight]);
}];
[self.messageContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.positionContainerView.mas_bottom);
make.top.equalTo(self.stageView.mas_bottom);
make.bottom.equalTo(self.menuContainerView.mas_top).offset(-5);
make.left.equalTo(self.view);
make.right.equalTo(self.activityContainerView.mas_left).offset(-10);
@@ -129,11 +130,10 @@
make.width.mas_equalTo(80);
}];
}
#pragma mark - XPRoomProtocol
- (void)getRoomInfoSuccess:(RoomInfoModel *)roomInfo {
self.roomInfo = roomInfo;
RtcEngineType type = [roomInfo.audioSdkType isEqualToString:@"wujie"] ? RtcEngineType_WJ : ([roomInfo.audioSdkType isEqualToString:@"zego"] ? RtcEngineType_Zego : RtcEngineType_Agora);
[RtcManager initEngineWithType:type delegate:self.positionContainerView.postionView];
///
[[XPIMManager shareManager].chatRoomManager setCurrentRoomInfo:roomInfo];
NSString * uid = [AccountInfoStorage instance].getUid;
@@ -154,31 +154,43 @@
}
- (void)getUserInfoSuccess:(UserInfoModel *)userInfo {
self.usereInfo = userInfo;
// TODO:
[[XPIMManager shareManager].chatRoomManager enterRoomWithRoomId:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] userInfo:self.usereInfo];
self.userInfo = userInfo;
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
}
- (void)openRoomSuccess:(RoomInfoModel *)roomInfo {
self.roomInfo = roomInfo;
[self configRoomInfoContainerViewWithRoomInfo:roomInfo];
// TODO:
[[XPIMManager shareManager].chatRoomManager enterRoomWithRoomId:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] userInfo:self.usereInfo];
[self.presenter enterNIMRoom:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId] user:self.userInfo];
}
- (void)onExitChatRoomSuccess {
///
[[RtcManager instance] exitRoom];
[[RtcManager instance] destory];
///
[[XPIMManager shareManager].microQueueManager setCurrentUserInfo:nil];
[[XPIMManager shareManager].chatRoomManager removeDelegate:self];
[self enterRoomFail];
- (void)enterRoomSuccess {
[self.stageView setHostDelegate:self];
}
- (void)enterRoomFail {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)onExitChatRoomSuccess {
///
[[RtcManager instance] exitRoom];
[[RtcManager instance] destory];
///
// [[XPIMManager shareManager].microQueueManager setCurrentUserInfo:nil];
[[XPIMManager shareManager].chatRoomManager removeDelegate:self];
[self enterRoomFail];
}
#pragma mark - RoomDelegate
- (RoomInfoModel *)getRoomInfo {
return self.roomInfo;
}
- (UserInfoModel *)getUserInfo {
return self.userInfo;
}
- (XPRoomBackContainerView *)backContainerView {
if (!_backContainerView) {
_backContainerView = [[XPRoomBackContainerView alloc] init];
@@ -194,11 +206,11 @@
return _roomInfoContainerView;
}
- (XPRoomPositionContainView *)positionContainerView {
if (!_positionContainerView) {
_positionContainerView = [[XPRoomPositionContainView alloc] init];
- (SocialStageView *)stageView {
if (!_stageView) {
_stageView = [[SocialStageView alloc] init];
}
return _positionContainerView;
return _stageView;
}
- (XPRoomMessageContainerView *)messageContainerView {
@@ -222,5 +234,4 @@
return _activityContainerView;
}
@end

View File

@@ -11,7 +11,7 @@
#import "AccountModel.h"
#import "Api+Main.h"
#import "MainProtocol.h"
#import "NSObject+JSONString.h"
#import "NSObject+MJExtension.h"
#import <NIMSDK/NIMSDK.h>
@implementation MainPresenter
@@ -60,7 +60,7 @@
if (array == nil || array.count <= 0) {
return;
}
NSString * transcationIdStr = [array objectToJSONString];
NSString * transcationIdStr = [array toJSONString];
[Api requestCheckTranscationIds:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSString * uid = [AccountInfoStorage instance].getUid;
[RechargeStorage delegateAllTranscationIdsWithUid:uid];