Implemente l'accès authentifié au chat
This commit is contained in:
parent
2237cf717e
commit
f10956c13e
12 changed files with 179 additions and 62 deletions
|
|
@ -273,7 +273,7 @@ namespace BookAStar
|
||||||
chatHubConnection.Error += ChatHubConnection_Error;
|
chatHubConnection.Error += ChatHubConnection_Error;
|
||||||
|
|
||||||
chatHubProxy = chatHubConnection.CreateHubProxy("ChatHub");
|
chatHubProxy = chatHubConnection.CreateHubProxy("ChatHub");
|
||||||
chatHubProxy.On<string, string>("PV", (n, m) => {
|
chatHubProxy.On<string, string>("addPV", (n, m) => {
|
||||||
DataManager.Current.PrivateMessages.Add(
|
DataManager.Current.PrivateMessages.Add(
|
||||||
new ChatMessage
|
new ChatMessage
|
||||||
{
|
{
|
||||||
|
|
@ -283,17 +283,21 @@ namespace BookAStar
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
MainSettings_UserChanged(this, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainSettings_UserChanged(object sender, EventArgs e)
|
private void MainSettings_UserChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (MainSettings.CurrentUser != null)
|
if (MainSettings.CurrentUser == null)
|
||||||
{
|
{
|
||||||
if (chatHubConnection.Headers.ContainsKey("Bearer"))
|
chatHubConnection.Headers.Clear();
|
||||||
chatHubConnection.Headers.Remove("Bearer");
|
}
|
||||||
chatHubConnection.Headers.Add("Bearer", MainSettings.CurrentUser.YavscTokens.AccessToken);
|
else
|
||||||
|
{
|
||||||
|
var token = MainSettings.CurrentUser.YavscTokens.AccessToken;
|
||||||
|
chatHubConnection.Headers.Add(
|
||||||
|
"Authorization", $"Bearer {token}");
|
||||||
}
|
}
|
||||||
else chatHubConnection.Headers.Remove("Bearer");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChatHubConnection_Error(Exception obj)
|
private void ChatHubConnection_Error(Exception obj)
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@
|
||||||
<Compile Include="Behaviors\PickerBehavior.cs" />
|
<Compile Include="Behaviors\PickerBehavior.cs" />
|
||||||
<Compile Include="Behaviors\StarBehavior.cs" />
|
<Compile Include="Behaviors\StarBehavior.cs" />
|
||||||
<Compile Include="Constants.cs" />
|
<Compile Include="Constants.cs" />
|
||||||
|
<Compile Include="Converters\SignalRConnectionStateToObject.cs" />
|
||||||
<Compile Include="Data\LocalState.cs" />
|
<Compile Include="Data\LocalState.cs" />
|
||||||
<Compile Include="Model\Social\Messaging\ChatStatus.cs" />
|
<Compile Include="Model\Social\Messaging\ChatStatus.cs" />
|
||||||
<Compile Include="Model\Social\Messaging\PrivateMessage.cs" />
|
<Compile Include="Model\Social\Messaging\PrivateMessage.cs" />
|
||||||
|
|
@ -376,6 +377,12 @@
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="Images\Chat\connected.png" />
|
||||||
|
<Content Include="Images\Chat\connecting.png" />
|
||||||
|
<Content Include="Images\Chat\disconnected.png" />
|
||||||
|
<Content Include="Images\Chat\reconnecting.png" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||||
<Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
<Import Project="..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\..\packages\Xamarin.Forms.2.3.2.127\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ using Xamarin.Forms;
|
||||||
|
|
||||||
namespace BookAStar.Converters
|
namespace BookAStar.Converters
|
||||||
{
|
{
|
||||||
class BooleanToObjectConverter<T> : IValueConverter
|
public class BooleanToObjectConverter<T> : IValueConverter
|
||||||
{
|
{
|
||||||
public T FalseObject { set; get; }
|
public T FalseObject { set; get; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
using Microsoft.AspNet.SignalR.Client;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
|
namespace BookAStar.Converters
|
||||||
|
{
|
||||||
|
public class SignalRConnectionStateToObject<T> : IValueConverter
|
||||||
|
{
|
||||||
|
public T ConnectedObject { set; get; }
|
||||||
|
|
||||||
|
public T ConnectingObject { set; get; }
|
||||||
|
|
||||||
|
public T DisconnectedObject { set; get; }
|
||||||
|
|
||||||
|
public T ReconnectingObject { set; get; }
|
||||||
|
|
||||||
|
public object Convert(object value, Type targetType,
|
||||||
|
object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
switch ((ConnectionState)value) {
|
||||||
|
case ConnectionState.Connected: return ConnectedObject;
|
||||||
|
case ConnectionState.Connecting: return ConnectingObject;
|
||||||
|
case ConnectionState.Disconnected: return DisconnectedObject;
|
||||||
|
case ConnectionState.Reconnecting: return ReconnectingObject;
|
||||||
|
}
|
||||||
|
Debug.Assert(false);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object ConvertBack(object value, Type targetType,
|
||||||
|
object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BookAStar/BookAStar/Images/Chat/connected.png
Normal file
BIN
BookAStar/BookAStar/Images/Chat/connected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2 KiB |
BIN
BookAStar/BookAStar/Images/Chat/connecting.png
Normal file
BIN
BookAStar/BookAStar/Images/Chat/connecting.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
BIN
BookAStar/BookAStar/Images/Chat/disconnected.png
Normal file
BIN
BookAStar/BookAStar/Images/Chat/disconnected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
BIN
BookAStar/BookAStar/Images/Chat/reconnecting.png
Normal file
BIN
BookAStar/BookAStar/Images/Chat/reconnecting.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4 KiB |
|
|
@ -6,13 +6,20 @@ using XLabs.Platform.Services;
|
||||||
|
|
||||||
namespace BookAStar.Pages
|
namespace BookAStar.Pages
|
||||||
{
|
{
|
||||||
|
using Data;
|
||||||
public partial class BookQueriesPage : ContentPage
|
public partial class BookQueriesPage : ContentPage
|
||||||
{
|
{
|
||||||
public BookQueriesPage()
|
public BookQueriesPage()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
BindingContext = new BookQueriesViewModel();
|
var model = new BookQueriesViewModel();
|
||||||
|
model.RefreshQueries =
|
||||||
|
new Command( () => {
|
||||||
|
DataManager.Current.BookQueries.Execute(null);
|
||||||
|
this.list.EndRefresh();
|
||||||
|
});
|
||||||
|
|
||||||
|
BindingContext = model;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnViewDetail(object sender, ItemTappedEventArgs e)
|
private void OnViewDetail(object sender, ItemTappedEventArgs e)
|
||||||
|
|
@ -20,18 +27,5 @@ namespace BookAStar.Pages
|
||||||
BookQueryData data = e.Item as BookQueryData;
|
BookQueryData data = e.Item as BookQueryData;
|
||||||
App.NavigationService.NavigateTo<BookQueryPage>(true,data);
|
App.NavigationService.NavigateTo<BookQueryPage>(true,data);
|
||||||
}
|
}
|
||||||
protected override void OnSizeAllocated(double width, double height)
|
|
||||||
{
|
|
||||||
/* TODO find a responsive layout
|
|
||||||
if (width > height)
|
|
||||||
{
|
|
||||||
mainLayout.Orientation = StackOrientation.Horizontal;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mainLayout.Orientation = StackOrientation.Vertical;
|
|
||||||
} */
|
|
||||||
base.OnSizeAllocated(width, height);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,30 +4,74 @@
|
||||||
x:Class="BookAStar.Pages.ChatPage"
|
x:Class="BookAStar.Pages.ChatPage"
|
||||||
xmlns:views="clr-namespace:BookAStar.Views;assembly=BookAStar"
|
xmlns:views="clr-namespace:BookAStar.Views;assembly=BookAStar"
|
||||||
xmlns:controls="clr-namespace:XLabs.Forms.Controls;assembly=XLabs.Forms"
|
xmlns:controls="clr-namespace:XLabs.Forms.Controls;assembly=XLabs.Forms"
|
||||||
xmlns:toolkit="clr-namespace:XLabs.Forms.Mvvm;assembly=XLabs.Forms"
|
xmlns:toolkit="clr-namespace:XLabs.Forms.Mvvm;assembly=XLabs.Forms"
|
||||||
|
xmlns:converters="clr-namespace:BookAStar.Converters;assembly=BookAStar"
|
||||||
|
xmlns:local="clr-namespace:BookAStar;Assembly:BookAStar"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<TabbedPage.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<converters:SignalRConnectionStateToObject x:Key="cxToStyleButton" x:TypeArguments="Style">
|
||||||
|
|
||||||
|
<converters:SignalRConnectionStateToObject.DisconnectedObject>
|
||||||
|
<Style TargetType="Button">
|
||||||
|
<Setter Property="Image"
|
||||||
|
Value="{extensions:ImageResource BookAStar.Images.Chat.disconnected.png}" />
|
||||||
|
</Style>
|
||||||
|
</converters:SignalRConnectionStateToObject.DisconnectedObject>
|
||||||
|
|
||||||
|
<converters:SignalRConnectionStateToObject.ConnectedObject>
|
||||||
|
<Style TargetType="Button">
|
||||||
|
<Setter Property="Image"
|
||||||
|
Value="{extensions:ImageResource BookAStar.Images.Chat.connected.png}" />
|
||||||
|
</Style>
|
||||||
|
</converters:SignalRConnectionStateToObject.ConnectedObject>
|
||||||
|
|
||||||
|
<converters:SignalRConnectionStateToObject.ConnectingObject>
|
||||||
|
<Style TargetType="Button">
|
||||||
|
<Setter Property="Source"
|
||||||
|
Value="{extensions:ImageResource BookAStar.Images.Chat.connecting.png}" />
|
||||||
|
</Style>
|
||||||
|
</converters:SignalRConnectionStateToObject.ConnectingObject>
|
||||||
|
|
||||||
|
<converters:SignalRConnectionStateToObject.ReconnectingObject>
|
||||||
|
<Style TargetType="Button">
|
||||||
|
<Setter Property="Source"
|
||||||
|
Value="{extensions:ImageResource BookAStar.Images.Chat.reconnecting.png}" />
|
||||||
|
</Style>
|
||||||
|
</converters:SignalRConnectionStateToObject.ReconnectingObject>
|
||||||
|
</converters:SignalRConnectionStateToObject>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</TabbedPage.Resources> -->
|
||||||
<TabbedPage.Children>
|
<TabbedPage.Children>
|
||||||
<ContentPage Title="Public" Icon="chat_icon_s.png" >
|
<ContentPage Title="Public" Icon="chat_icon_s.png" >
|
||||||
<StackLayout Padding="5, 5, 5, 5">
|
<StackLayout Padding="5, 5, 5, 5">
|
||||||
<StackLayout Spacing = "12"
|
<StackLayout Spacing = "12"
|
||||||
Orientation = "Horizontal"
|
Orientation = "Horizontal"
|
||||||
Padding="5, 0, 5, 0">
|
Padding="5, 0, 5, 0">
|
||||||
|
|
||||||
|
<Button x:Name="reconnectButton" Clicked="ReconnectButton_Clicked"/>
|
||||||
|
<!-- Style="{Binding Source={x:Static local:App.CurrentApp.ChatHubConnection},
|
||||||
|
Path=State,
|
||||||
|
Converter={StaticResource cxToStyleButton}}" -->
|
||||||
<Entry x:Name="messageEntry" Placeholder = "enter your Message"
|
<Entry x:Name="messageEntry" Placeholder = "enter your Message"
|
||||||
VerticalOptions = "Center"
|
VerticalOptions = "Center"
|
||||||
HorizontalOptions = "FillAndExpand"></Entry>
|
HorizontalOptions = "FillAndExpand"></Entry>
|
||||||
<Button x:Name="sendButton" Text = "Send" HorizontalOptions = "End"
|
<Button x:Name="sendButton" Text = "Send" HorizontalOptions = "End"
|
||||||
VerticalOptions = "Center"></Button>
|
VerticalOptions = "Center"></Button>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<ListView x:Name="messageList" HasUnevenRows="true">
|
<ListView x:Name="messageList" HasUnevenRows="true"
|
||||||
|
>
|
||||||
<ListView.ItemTemplate HeightRequest="80" VerticalOptions="StartAndExpand">
|
<ListView.ItemTemplate HeightRequest="80" VerticalOptions="StartAndExpand">
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<ViewCell>
|
<ViewCell>
|
||||||
<ViewCell.View>
|
<ViewCell.View>
|
||||||
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
|
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
|
||||||
<Label Text="{Binding Date, StringFormat='{0:HH:mm}'}" FontAttributes="Italic" />
|
<Label Text="{Binding Date, StringFormat='{0:HH:mm}'}" FontAttributes="Italic" />
|
||||||
<Label Text="{Binding SenderId}" FontFamily="monospace" FontAttributes="Italic" />
|
<Label Text="{Binding SenderId}" FontFamily="monospace" FontAttributes="Italic" />
|
||||||
<BoxView WidthRequest="1" HeightRequest="15" Color="#000090"/>
|
<BoxView WidthRequest="1" HeightRequest="15" Color="#000090"/>
|
||||||
<Label Text="{Binding Message}" FontFamily="monospace" />
|
<Label Text="{Binding Message}" FontFamily="monospace" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ViewCell.View>
|
</ViewCell.View>
|
||||||
</ViewCell>
|
</ViewCell>
|
||||||
|
|
@ -36,61 +80,62 @@
|
||||||
</ListView>
|
</ListView>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ContentPage>
|
</ContentPage>
|
||||||
<ContentPage Title="Notifications" Icon="exclam.png" >
|
<ContentPage Title="Notifications" Icon="exclam.png" >
|
||||||
<StackLayout Padding="5, 5, 5, 5">
|
<StackLayout Padding="5, 5, 5, 5">
|
||||||
<ListView x:Name="notifList" HasUnevenRows="true">
|
<ListView x:Name="notifList" HasUnevenRows="true">
|
||||||
<ListView.ItemTemplate HeightRequest="80" VerticalOptions="StartAndExpand">
|
<ListView.ItemTemplate HeightRequest="80" VerticalOptions="StartAndExpand">
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<ViewCell>
|
<ViewCell>
|
||||||
<ViewCell.View>
|
<ViewCell.View>
|
||||||
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
|
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
|
||||||
<Label Text="{Binding Date, StringFormat='{0:hh:mm}'}" FontAttributes="Italic" />
|
<Label Text="{Binding Date, StringFormat='{0:hh:mm}'}" FontAttributes="Italic" />
|
||||||
<Label Text="{Binding SenderId}" FontFamily="monospace" FontAttributes="Italic" />
|
<Label Text="{Binding SenderId}" FontFamily="monospace" FontAttributes="Italic" />
|
||||||
<BoxView Color="#000090" WidthRequest="1" HeightRequest="15" />
|
<BoxView Color="#000090" WidthRequest="1" HeightRequest="15" />
|
||||||
<Label Text="{Binding Message}" FontFamily="monospace" />
|
<Label Text="{Binding Message}" FontFamily="monospace" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ViewCell.View>
|
</ViewCell.View>
|
||||||
</ViewCell>
|
</ViewCell>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListView.ItemTemplate>
|
</ListView.ItemTemplate>
|
||||||
</ListView>
|
</ListView>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ContentPage>
|
</ContentPage>
|
||||||
|
|
||||||
<ContentPage Title="Contacts" Icon="peer_to_peer.png" >
|
<ContentPage Title="Contacts" Icon="peer_to_peer.png" >
|
||||||
<StackLayout Padding="5, 5, 5, 5">
|
<StackLayout Padding="5, 5, 5, 5">
|
||||||
<StackLayout Spacing = "12"
|
<StackLayout Spacing = "12"
|
||||||
Orientation = "Horizontal"
|
Orientation = "Horizontal"
|
||||||
Padding="5, 0, 5, 0">
|
Padding="5, 0, 5, 0">
|
||||||
<Entry x:Name="pvEntry" Placeholder = "enter your private message"
|
<Entry x:Name="pvEntry" Placeholder = "enter your private message"
|
||||||
VerticalOptions = "Center"
|
VerticalOptions = "Center"
|
||||||
HorizontalOptions = "FillAndExpand"></Entry>
|
HorizontalOptions = "FillAndExpand"></Entry>
|
||||||
<!--
|
<!--
|
||||||
<controls:ExtendedPicker x:Name="contactPicker" Display="{Binding UserName}"></controls:ExtendedPicker>
|
<controls:ExtendedPicker x:Name="contactPicker" Display="{Binding UserName}"></controls:ExtendedPicker>
|
||||||
-->
|
-->
|
||||||
<controls:ExtendedPicker x:Name="contactPicker" />
|
<controls:ExtendedPicker x:Name="contactPicker" />
|
||||||
<Button x:Name="sendPVButton" Text = "Send" HorizontalOptions = "End"
|
<Button x:Name="sendPVButton" Text = "Send" HorizontalOptions = "End"
|
||||||
VerticalOptions = "Center"></Button>
|
VerticalOptions = "Center"></Button>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<ListView x:Name="PVList" HasUnevenRows="true">
|
<ListView x:Name="PVList" HasUnevenRows="true">
|
||||||
<ListView.ItemTemplate HeightRequest="80" VerticalOptions="StartAndExpand">
|
<ListView.ItemTemplate HeightRequest="80"
|
||||||
|
VerticalOptions="StartAndExpand">
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<ViewCell>
|
<ViewCell>
|
||||||
<ViewCell.View>
|
<ViewCell.View>
|
||||||
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
|
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
|
||||||
<Label Text="{Binding Date, StringFormat='{0:hh:mm}'}" FontAttributes="Italic" />
|
<Label Text="{Binding Date, StringFormat='{0:hh:mm}'}" FontAttributes="Italic" />
|
||||||
<Label Text="{Binding SenderId}" FontFamily="monospace" FontAttributes="Italic" />
|
<Label Text="{Binding SenderId}" FontFamily="monospace" FontAttributes="Italic" />
|
||||||
<BoxView Color="#000090" WidthRequest="1" HeightRequest="15" />
|
<BoxView Color="#000090" WidthRequest="1" HeightRequest="15" />
|
||||||
<Label Text="{Binding Message}" FontFamily="monospace" />
|
<Label Text="{Binding Message}" FontFamily="monospace" />
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ViewCell.View>
|
</ViewCell.View>
|
||||||
</ViewCell>
|
</ViewCell>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListView.ItemTemplate>
|
</ListView.ItemTemplate>
|
||||||
</ListView>
|
</ListView>
|
||||||
<!-- <views:UserListView ItemsSource="" /> -->
|
<!-- <views:UserListView ItemsSource="" /> -->
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
</ContentPage>
|
</ContentPage>
|
||||||
</TabbedPage.Children>
|
</TabbedPage.Children>
|
||||||
</TabbedPage>
|
</TabbedPage>
|
||||||
|
|
@ -29,6 +29,8 @@ namespace BookAStar.Pages
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
ConnectionState cs = App.CurrentApp.ChatHubConnection.State;
|
||||||
|
|
||||||
await App.CurrentApp.ChatHubProxy.Invoke<string>("Send", ChatUser, messageEntry.Text);
|
await App.CurrentApp.ChatHubProxy.Invoke<string>("Send", ChatUser, messageEntry.Text);
|
||||||
messageEntry.Text = null;
|
messageEntry.Text = null;
|
||||||
}
|
}
|
||||||
|
|
@ -39,13 +41,25 @@ namespace BookAStar.Pages
|
||||||
|
|
||||||
IsBusy = false;
|
IsBusy = false;
|
||||||
};
|
};
|
||||||
// contactPicker.DisplayProperty = "UserName";
|
|
||||||
|
|
||||||
messageList.ItemsSource = Messages = new ObservableCollection<ChatMessage>();
|
|
||||||
PVList.ItemsSource = DataManager.Current.PrivateMessages;
|
|
||||||
App.CurrentApp.ChatHubConnection.StateChanged += ChatHubConnection_StateChanged;
|
|
||||||
// DataManager.Current.Contacts
|
|
||||||
|
|
||||||
|
sendPVButton.Clicked += async (sender, args) =>
|
||||||
|
{
|
||||||
|
IsBusy = true;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await App.CurrentApp.ChatHubProxy.Invoke<string>("SendPV", ChatUser, messageEntry.Text);
|
||||||
|
messageEntry.Text = null;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
IsBusy = false;
|
||||||
|
};
|
||||||
|
messageList.ItemsSource = Messages = new ObservableCollection<ChatMessage>();
|
||||||
|
App.CurrentApp.ChatHubConnection.StateChanged += ChatHubConnection_StateChanged;
|
||||||
MainSettings.UserChanged += MainSettings_UserChanged;
|
MainSettings.UserChanged += MainSettings_UserChanged;
|
||||||
MainSettings_UserChanged(this, null);
|
MainSettings_UserChanged(this, null);
|
||||||
|
|
||||||
|
|
@ -70,15 +84,26 @@ namespace BookAStar.Pages
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ReconnectButton_Clicked(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
App.CurrentApp.ChatHubConnection.Stop();
|
||||||
|
App.CurrentApp.ChatHubConnection.Start();
|
||||||
|
}
|
||||||
|
|
||||||
private void MainSettings_UserChanged(object sender, EventArgs e)
|
private void MainSettings_UserChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ChatUser = MainSettings.UserName;
|
ChatUser = MainSettings.UserName;
|
||||||
contactPicker.ItemsSource = DataManager.Current.Contacts;
|
contactPicker.ItemsSource = DataManager.Current.Contacts;
|
||||||
|
PVList.ItemsSource = DataManager.Current.PrivateMessages;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChatHubConnection_StateChanged(StateChange obj)
|
private void ChatHubConnection_StateChanged(StateChange obj)
|
||||||
{
|
{
|
||||||
sendButton.IsEnabled = obj.NewState == ConnectionState.Connected;
|
Xamarin.Forms.Device.BeginInvokeOnMainThread(
|
||||||
|
() => {
|
||||||
|
sendButton.IsEnabled = obj.NewState == ConnectionState.Connected;
|
||||||
|
reconnectButton.IsEnabled = obj.NewState != ConnectionState.Connected;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ namespace BookAStar.ViewModels
|
||||||
|
|
||||||
public ICommand RefreshQueries
|
public ICommand RefreshQueries
|
||||||
{
|
{
|
||||||
get { return DataManager.Current.BookQueries; }
|
get; set;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue