fly 2 years ago
parent
commit
700fb099e8

+ 142 - 0
.gitignore

@@ -0,0 +1,142 @@
+# ---> C Sharp
+# Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
+[Bb]in/
+[Oo]bj/
+
+# mstest test results
+TestResults
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+[Dd]ebug/
+[Rr]elease/
+x64/
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.log
+*.vspscc
+*.vssscc
+.builds
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish
+
+# Publish Web Output
+*.Publish.xml
+
+# NuGet Packages Directory
+packages
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+[Bb]in
+[Oo]bj
+sql
+TestResults
+[Tt]est[Rr]esult*
+*.Cache
+ClientBin
+[Ss]tyle[Cc]op.*
+~$*
+*.dbmdl
+Generated_Code #added for RIA/Silverlight projects
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+
+
+#Ignore thumbnails created by Windows
+Thumbs.db
+#Ignore files built by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+[Bb]in
+[Dd]ebug*/
+*.lib
+*.sbr
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+.vs/
+#Nuget packages folder
+packages/

+ 0 - 32
AcceptLiveConsultationRequest.cs

@@ -1,32 +0,0 @@
-using WingInterfaceLibrary.Request;
-
-namespace WingLiveConsultationService
-{
-    public class AcceptLiveConsultationRequest : TokenRequest
-    {    
-        /// <summary>
-        /// The diagnosis metting room No.
-        /// </summary>
-        /// <value></value>
-        public int RoomNo {get;set;}            
-    }
-
-    public class AcceptLiveConsultationResult
-    {        
-    }
-
-    public class AcceptLiveConsultationNotification
-    {
-        /// <summary>
-        /// The diagnosis metting No.
-        /// </summary>
-        /// <value></value>
-        public int RoomNo {get;set;}
-        
-        /// <summary>
-        /// The info of who accept the diagnosis metting invitation
-        /// </summary>
-        /// <value></value>
-        public LiveConsultationMemeber Accepter {get;set;}
-    }
-}

+ 0 - 58
InitiateLiveConsultationRequest.cs

@@ -1,58 +0,0 @@
-using WingInterfaceLibrary.Request;
-
-namespace WingLiveConsultationService
-{
-    public class InitiateLiveConsultationRequest : TokenRequest
-    {
-        /// <summary>
-        /// User id or device id
-        /// </summary>
-        /// <value></value>
-        public IList<string> OtherIds {get; set;}
-    }
-
-    public class InitiateLiveConsultationResult
-    {
-        /// <summary>
-        /// The video protocol, Rtmp for Rtc
-        /// </summary>
-        /// <value></value>
-        public VideoProtocol Protocol {get;set;}
-
-        /// <summary>
-        /// Room No. 
-        /// </summary>
-        /// <value></value>
-        public int RoomNo {get;set;}
-
-        public IList<LiveConsultationMemeber> UserLiveDatas  {get;set;}        
-
-        public IList<LiveConsultationMemeber> DeviceLiveDatas {get;set;}
-    }
-
-    public class InviteLiveConsultationNotification
-    {
-        /// <summary>
-        /// The video protocol, Rtmp for Rtc
-        /// </summary>
-        /// <value></value>
-        public VideoProtocol Protocol {get;set;}
-
-        /// <summary>
-        /// Room Id 
-        /// </summary>
-        /// <value></value>
-        public int RoomId {get;set;}
-        
-        /// <summary>
-        /// The diagonosis meeting initiator
-        /// </summary>
-        /// <value></value>
-        public LiveConsultationMemeber Initiator {get;set;}
-
-        public IList<LiveConsultationMemeber> UserLiveDatas  {get;set;}        
-
-        public IList<LiveConsultationMemeber> DeviceLiveDatas {get;set;}
-    }
-
-}

+ 0 - 38
JoinLiveConsultationRequest.cs

@@ -1,38 +0,0 @@
-using WingInterfaceLibrary.Request;
-
-namespace WingLiveConsultationService
-{
-    public class JoinLiveConsultationRequest : TokenRequest
-    {
-        /// <summary>
-        /// The diagnosis metting No.
-        /// </summary>
-        /// <value></value>
-        public int RoomNo {get;set;}
-        
-        /// <summary>
-        /// The id of who join the diagnosis metting id
-        /// </summary>
-        /// <value></value>
-        public string JoinerId {get;set;}
-    }
-
-    public class JoinLiveConsultationResult    
-    {        
-    }
-
-    public class JoinLiveConsultationNotification
-    {
-        /// <summary>
-        /// The diagnosis metting No.
-        /// </summary>
-        /// <value></value>
-        public int RoomNo {get;set;}
-        
-        /// <summary>
-        /// The info of who join the diagnosis metting 
-        /// </summary>
-        /// <value></value>
-        public LiveConsultationMemeber Joiner {get;set;}
-    }
-}

+ 0 - 38
LeaveLiveConsultationRequest.cs

@@ -1,38 +0,0 @@
-using WingInterfaceLibrary.Request;
-
-namespace WingLiveConsultationService
-{
-    public class LeaveLiveConsultationRequest : TokenRequest
-    {
-         /// <summary>
-        /// The diagnosis metting No.
-        /// </summary>
-        /// <value></value>
-        public int RoomNo {get;set;}
-        
-        /// <summary>
-        /// The id of who leave the diagnosis metting 
-        /// </summary>
-        /// <value></value>
-        public string LeaverId {get;set;}
-    }
-
-    public class LeaveLiveConsultationResult
-    {        
-    }
-
-    public class LeaveLiveConsultationNotification
-    {
-        /// <summary>
-        /// The diagnosis metting No.
-        /// </summary>
-        /// <value></value>
-        public int RoomNo {get;set;}
-        
-        /// <summary>
-        /// The id of who leave the diagnosis metting 
-        /// </summary>
-        /// <value></value>
-        public string LeaverId {get;set;}
-    }
-}

+ 1 - 0
LiveConsultation.cs

@@ -8,6 +8,7 @@ using WingInterfaceLibrary.Request.Authentication;
 using WingInterfaceLibrary.Enum.NotificationEnum;
 using WingServerCommon.Log;
 using WingServerCommon.Config;
+using WingInterfaceLibrary.LiveConsultation;
 
 namespace WingLiveConsultationService
 {

+ 0 - 14
LiveConsultationHeartRateRequest.cs

@@ -1,14 +0,0 @@
-using WingInterfaceLibrary.Request;
-
-namespace WingLiveConsultationService
-{
-    public class LiveConsultationHeartRateRequest : TokenRequest
-    {
-        
-    }
-
-    public class LiveConsultationHeartRateResult
-    {
-
-    }
-}

+ 0 - 65
LiveConsultationMemeber.cs

@@ -1,65 +0,0 @@
-using WingInterfaceLibrary.Enum;
-namespace WingLiveConsultationService
-{
-    public enum LiveConsultationMemeberStatus
-    {
-        Accepted,
-        Rejected,
-        Joined,
-        Left
-    }
-
-    public class LiveConsultationMemeber
-    {
-        /// <summary>
-        /// User or device Id
-        /// </summary>
-        /// <value></value>
-        public string Id {get;set;}
-        
-        /// <summary>
-        /// User or device name
-        /// </summary>
-        /// <value></value>
-        public string Name {get;set;}
-        
-        /// <summary>
-        /// Indicates the user or device is online
-        /// </summary>
-        /// <value></value>
-        public bool IsOnline {get;set;}
-        
-        /// <summary>
-        /// Indicates the user or device is mute
-        /// </summary>
-        /// <value></value>
-        public bool Mute {get;set;}
-
-        /// <summary>
-        /// Indicates the user is initiator
-        /// </summary>
-        /// <value></value>
-        public bool IsInitiator {get;set;}
-        
-        /// <summary>
-        /// The member status
-        /// </summary>
-        /// <value></value>
-        public LiveConsultationMemeberStatus Status {get;set;}
-        
-        /// <summary>
-        /// The login server url
-        /// </summary>
-        /// <value></value>
-        public string LoginServerUrl {get;set;}
-
-        public LoginSource LoginSource {get;set;}
-
-        /// <summary>
-        /// The live channel data or the bypass live channel data (for RTC)
-        /// </summary>
-        /// <value></value>
-        public LiveData LiveData {get;set;}
-
-    }    
-}

+ 2 - 0
LiveConsultationRoomManager.cs

@@ -1,3 +1,5 @@
+using WingInterfaceLibrary.LiveConsultation;
+
 namespace WingLiveConsultationService
 {
     public interface ILiveConsultationRoomManager

+ 154 - 80
LiveConsultationService.cs

@@ -10,58 +10,41 @@ using WingInterfaceLibrary.Enum;
 using WingInterfaceLibrary.Request.Notification;
 using WingInterfaceLibrary.Enum.NotificationEnum;
 using WingServerCommon.Service;
+using WingInterfaceLibrary.LiveConsultation;
+using WingInterfaceLibrary.DTO.Organization;
+using WingInterfaceLibrary.Request.Consultation;
+using WingInterfaceLibrary.DTO;
+using WingInterfaceLibrary.Result;
+using WingInterfaceLibrary.DTO.Consultation;
+using WingInterfaceLibrary.Interface.DBInterface;
+using WingServerCommon.Interfaces.Cache;
+using WingInterfaceLibrary.DB.Request;
 
 namespace WingLiveConsultationService
 {
-    public interface ILiveConsultationService
-    {
-        /// <summary>
-        /// Initiate a diagnosis meeting
-        /// </summary>
-        /// <param name="request">The request</param>
-        /// <returns></returns>
-        Task<InitiateLiveConsultationResult> InitiateLiveConsultationAsync(InitiateLiveConsultationRequest request);
 
-        /// <summary>
-        /// Accept a diagnosis request
-        /// </summary>
-        /// <param name="request">The request</param>
-        /// <returns></returns>
-        Task<AcceptLiveConsultationResult> AcceptLiveConsultationAsync(AcceptLiveConsultationRequest request);
-        
-        /// <summary>
-        /// Reject a diagnosis request
-        /// </summary>
-        /// <param name="request">The request</param>
-        /// <returns></returns>
-        Task<RejectLiveConsultationResult> RejectLiveConsultationAsync(RejectLiveConsultationRequest request);
-        /// <summary>
-        /// Join a diagnosis request
-        /// </summary>
-        /// <param name="request">The request</param>
-        /// <returns></returns>
-        Task<JoinLiveConsultationResult> JoinLiveConsultationAsync(JoinLiveConsultationRequest request);
-        /// <summary>
-        /// Leave a diagnosis request
-        /// </summary>
-        /// <param name="request">The request</param>
-        /// <returns></returns>
-        Task<LeaveLiveConsultationResult> LeaveLiveConsultationAsync(LeaveLiveConsultationRequest request);
-        /// <summary>
-        /// Send HeartRate request in a diagnosis metting
-        /// </summary>
-        /// <param name="request">The request</param>
-        /// <returns></returns>
-        Task<LiveConsultationHeartRateResult> HeartRateAsync(LiveConsultationHeartRateRequest request);
-    }
-    
+
     public class LiveConsultationService : JsonRpcService, ILiveConsultationService
     {
         private readonly VideoProtocol _videoProtocol; //Todo from config
         private ILiveConsultationRoomManager _realtimeDiagosisRoomManager;
         private IAuthenticationService _authenticationService;
         private INotificationService _notificationService;
-        
+        private IUserDBService _userDBService;
+        private IOrganizationDBService _organizationDBService;
+
+        /// <summary>
+        /// Init service
+        /// </summary>
+        public override void Load(JsonRpcClientPool jsonRpcClientPool)
+        {
+            base.Load(jsonRpcClientPool);
+            _authenticationService = GetProxy<IAuthenticationService>();
+            _notificationService = GetProxy<INotificationService>();
+            _userDBService = GetProxy<IUserDBService>();
+            _organizationDBService = GetProxy<IOrganizationDBService>();
+        }
+
         /// <summary>
         /// Dispatch message function
         /// </summary>
@@ -81,17 +64,18 @@ namespace WingLiveConsultationService
         {
             var token = request.Token;
             var otherIds = request.OtherIds;
-            var tokenRequest = new TokenRequest(){ Token= token};
-            var tokensRequest = new GetTokenWithClientIdsRequest(){
-              ClientIds = otherIds as List<string>
+            var tokenRequest = new TokenRequest() { Token = token };
+            var tokensRequest = new GetTokenWithClientIdsRequest()
+            {
+                ClientIds = otherIds as List<string>
             };
             var initiateToken = await _authenticationService.GetTokenAsync(tokenRequest);
             var othersTokens = await _authenticationService.GetTokenWithClientIdsAsync(tokensRequest);
-            
+
             LiveConsultationMemeber initiator = null;
             if (_videoProtocol == VideoProtocol.Rtc)
-            {                
-                initiator = new LiveConsultationMemeber() {Id = initiateToken.Code, Name = initiateToken.AccountName};                            
+            {
+                initiator = new LiveConsultationMemeber() { Id = initiateToken.Code, Name = initiateToken.AccountName };
             }
             else
             {
@@ -100,20 +84,20 @@ namespace WingLiveConsultationService
                 {
                     //RtmpPushUrl = TODO
                 };
-                
-                initiator = new LiveConsultationMemeber() 
+
+                initiator = new LiveConsultationMemeber()
                 {
-                    Id = initiateToken.Code, 
+                    Id = initiateToken.Code,
                     Name = initiateToken.AccountName,
                     LiveData = liveData
-                };      
+                };
 
             }
 
             var others = new List<LiveConsultationMemeber>();
             var devices = new List<LiveConsultationMemeber>();
 
-            foreach(var tokenInfo in othersTokens)
+            foreach (var tokenInfo in othersTokens)
             {
                 var type = tokenInfo.AccountType;
 
@@ -121,43 +105,43 @@ namespace WingLiveConsultationService
                 {
                     //RtmpPushUrl = TODO
                 };
-                
-                var member = new LiveConsultationMemeber() 
+
+                var member = new LiveConsultationMemeber()
                 {
-                    Id = tokenInfo.Code, 
+                    Id = tokenInfo.Code,
                     Name = tokenInfo.AccountName,
                     LiveData = liveData
-                };      
-                 if(type == AccountType.User)
-                 {
+                };
+                if (type == AccountType.User)
+                {
                     others.Add(member);
-                 }
-                 else if(type == AccountType.US || type == AccountType.USBox)
-                 {
+                }
+                else if (type == AccountType.US || type == AccountType.USBox)
+                {
                     devices.Add(member);
-                 }                
+                }
             }
 
-            var room = _realtimeDiagosisRoomManager.CreateRoom(initiator, others, devices);    
-                    
+            var room = _realtimeDiagosisRoomManager.CreateRoom(initiator, others, devices);
+
             BroadcastNotificationRequest notificationRequest = new BroadcastNotificationRequest();
-            var ids = others.Select(x=>x.Id).ToList();
+            var ids = others.Select(x => x.Id).ToList();
             notificationRequest.ClientIds = ids; //TODO set message content
             //notificationRequest.Message = new NotifyMessage
             var notification = new InviteLiveConsultationNotification();
             //notify other guys
-            await _notificationService.PostBroadcastMessageAsync(notificationRequest);
+            await _notificationService.BroadcastMessageAsync(notificationRequest);
 
             var result = new InitiateLiveConsultationResult();
 
             //Start a timer for timeout process
             room.StartCheckConnectionTimeout(60000);//TOOD get the timeout from config 
-            
-            return result;            
+
+            return result;
         }
 
-        
-        
+
+
         /// <summary>
         /// Accept a diagnosis request
         /// </summary>
@@ -166,8 +150,9 @@ namespace WingLiveConsultationService
         public async Task<AcceptLiveConsultationResult> AcceptLiveConsultationAsync(AcceptLiveConsultationRequest request)
         {
             var token = request.Token;
-            var roomId = request.RoomNo;
-            var tokenRequest = new TokenRequest(){ Token= token};            
+            //todo roomCode change to roomId ??
+            var roomId = Convert.ToInt32(request.RoomCode);
+            var tokenRequest = new TokenRequest() { Token = token };
             var accepterToken = await _authenticationService.GetTokenAsync(tokenRequest);
 
             var result = new AcceptLiveConsultationResult();
@@ -181,19 +166,19 @@ namespace WingLiveConsultationService
             else
             {
                 //Notify other guys
-                var others = room.Members.Where(x=>x.Id != accepterToken.Code);
+                var others = room.Members.Where(x => x.Id != accepterToken.Code);
                 BroadcastNotificationRequest notificationRequest = new BroadcastNotificationRequest();
-                var otherIds = others.Select(x=>x.Id).ToList();
+                var otherIds = others.Select(x => x.Id).ToList();
                 notificationRequest.ClientIds = otherIds; //TODO set message content
                 //notificationRequest.Message = new NotifyMessage
                 //notify other guys
-                await _notificationService.PostBroadcastMessageAsync(notificationRequest);
+                await _notificationService.BroadcastMessageAsync(notificationRequest);
             }
 
             return result;
         }
 
-         /// <summary>
+        /// <summary>
         /// Reject a diagnosis request
         /// </summary>
         /// <param name="request">The request</param>
@@ -229,10 +214,99 @@ namespace WingLiveConsultationService
         {
             throw new NotImplementedException();
         }
-        
-        private void ThrowRpcException(CustomerRpcCode code, string message, string internalMessage=null)
+
+        private void ThrowRpcException(CustomerRpcCode code, string message, string internalMessage = null)
+        {
+            base.ThrowRpcException((int)code, message, internalMessage ?? message);
+        }
+
+        public async Task<List<OrganizationBaseDTO>> FindParentOrganizationsAsync(FindHigherOrganizationsRequest request)
+        {
+            var userCode = await GetClientIdByTokenAsync(request.Token);
+            var userInfoDO = await _userDBService.FindUserByCodeAsync(userCode);
+            var result = new List<OrganizationBaseDTO>
+            {
+
+            };
+            if (userInfoDO != null)
+            {
+                var organization = CacheMaintenance.Instance.Get<IOrganizationsManager>().Get(userInfoDO.RootOrganizationCode);
+                var organizationList = await _organizationDBService.GetOrganizationListAsync(new GetOrganizationListDBRequest
+                {
+                    OrganizationType = OrganizationTypeEnum.Corporation,
+                    Isinvented = false,
+                });
+                organizationList = organizationList.Where(x => x.OrganizationCode != userInfoDO.RootOrganizationCode)?.ToList() ?? new List<OrganizationDTO>();
+                result = organizationList.Select(c => new OrganizationBaseDTO()
+                {
+                    OrganizationCode = c.OrganizationCode,
+                    OrganizationName = c.OrganizationName,
+                }).ToList();
+            }
+            return result;
+        }
+
+        public Task<List<OrganizationBaseDTO>> FindGrassRootsOrganizationsAsync(FindGrassRootsOrganizationsRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<List<BaseDTO>> FindOrganizationExpertsAsync(FindOrganizationExpertsRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<string> ApplyConsultationAsync(ApplyConsultationRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<PageResult<ConsultationDetailDTO>> FindConsultationByPageAsync(FindConsultationByPageRequest request)
         {
-             base.ThrowRpcException((int)code, message,  internalMessage?? message);
+            throw new NotImplementedException();
+        }
+
+        public Task<ConsultationDetailDTO> FindConsultationDetailAsync(FindConsultationDetailRequest request)
+        {
+            throw new NotImplementedException();
         }
+
+        public Task<bool> ApprovalConsultationAsync(ApprovalConsultationRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<bool> RevokeConsultationAsync(RevokeConsultationRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<bool> DeleteConsultationAsync(DeleteConsultationRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<bool> UploadConsultationFilesAsync(UploadConsultationFilesRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<List<ConsultationFileDTO>> FindConsultationFilesAsync(FindConsultationFilesRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        public Task<CancelLiveConsultationResult> InitiateLiveConsultationAsync(CancelLiveConsultationRequest request)
+        {
+            throw new NotImplementedException();
+        }
+
+        private async Task<string> GetClientIdByTokenAsync(string token)
+        {
+            var request = new TokenRequest() { Token = token };
+            var result = await _authenticationService.GetTokenAsync(request);
+            return result.ClientId; //return User code 
+        }
+
     }
 }

+ 0 - 36
LiveData.cs

@@ -1,36 +0,0 @@
-namespace WingLiveConsultationService
-{
-    public class LiveData
-    {
-        /// <summary>
-        /// The channel image height
-        /// </summary>
-        /// <value></value>
-        public int Height { get; set; }
-         /// <summary>
-        /// The channel image width
-        /// </summary>
-        /// <value></value>
-        public int Width { get; set; }
-        /// <summary>
-        /// Rtmp push url
-        /// </summary>
-        /// <value></value>
-        public string RtmpPushUrl {get;set;}= string.Empty;
-        /// <summary>
-        /// Rtmp pull url
-        /// </summary>
-        /// <value></value>
-        public string RtmpPullUrl {get;set;}= string.Empty;        
-        /// <summary>
-        /// Http pull url
-        /// </summary>
-        /// <value></value>
-        public string HttpPullUrl {get;set;}= string.Empty;    
-        /// <summary>
-        /// Hls pull url for apple platform
-        /// </summary>
-        /// <value></value>    
-        public string HlsPullUrl {get;set;}= string.Empty;        
-    }
-}

+ 0 - 36
RejectLiveConsultationRequest.cs

@@ -1,36 +0,0 @@
-namespace WingLiveConsultationService
-{
-    public class RejectLiveConsultationRequest
-    {
-        /// <summary>
-        /// The diagnosis metting room id
-        /// </summary>
-        /// <value></value>
-        public int RoomId {get;set;}
-        
-        /// <summary>
-        /// The id of who reject the diagnosis metting invitation
-        /// </summary>
-        /// <value></value>
-        public string RejecterId {get;set;}
-    }
-
-    public class RejectLiveConsultationResult
-    {        
-    }
-
-    public class RejectLiveConsultationNotification
-    {
-        /// <summary>
-        /// The diagnosis metting id
-        /// </summary>
-        /// <value></value>
-        public int RoomId {get;set;}
-        
-        /// <summary>
-        /// The info of who reject the diagnosis metting invitation
-        /// </summary>
-        /// <value></value>
-        public LiveConsultationMemeber Rejecter {get;set;}
-    }
-}

+ 1 - 1
WingLiveConsultationService.csproj

@@ -9,6 +9,6 @@
   <ItemGroup>
     <PackageReference Include="WingInterfaceLibrary" Version="1.0.6.3" />
     <PackageReference Include="WingServerCommon" Version="1.0.0.26" />
-    <PackageReference Include="zlib.net-mutliplatform" Version="1.0.6" />   
+    <PackageReference Include="zlib.net-mutliplatform" Version="1.0.6" />
   </ItemGroup>
 </Project>