Skip to content

Commit 5172873

Browse files
committed
Implemented Two-Way chat
1 parent 0abbcf0 commit 5172873

24 files changed

+77
-13
lines changed
41 KB
Binary file not shown.

SyncPlayWPF/SyncPlayWPF/Common/Shared.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace SyncPlayWPF.Common {
88
public class Shared {
99
public static WpfPageTransitions.PageTransition WindowPageTransition;
1010
public static WpfPageTransitions.PageTransition LandingPageTransition;
11+
public static Pages.SessionPages.ChatSession ChatPageSingleton;
1112
public static SyncPlay.SyncPlayWrapper Wrapper;
1213

1314
}

SyncPlayWPF/SyncPlayWPF/Pages/SessionLandingPage.xaml.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ public partial class SessionLandingPage : UserControl {
2121
public SessionLandingPage() {
2222
InitializeComponent();
2323

24-
SessionPageWindow.ShowPage(new Pages.SessionPages.ChatSession());
24+
Common.Shared.ChatPageSingleton = new Pages.SessionPages.ChatSession();
25+
ShowChatWindow();
26+
}
27+
28+
private void ShowChatWindow() {
29+
SessionPageWindow.ShowPage(Common.Shared.ChatPageSingleton);
2530
}
2631
}
2732
}

SyncPlayWPF/SyncPlayWPF/Pages/SessionPages/ChatSession.xaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
<ColumnDefinition Width="50"/>
4040
</Grid.ColumnDefinitions>
4141
<custom:PromptingLabel
42+
x:Name="MessageBlockField"
43+
KeyUp="SendMessageEnterClick"
4244
Grid.Column="0"
4345
VerticalAlignment="Center"
4446
HorizontalAlignment="Left"
@@ -56,7 +58,8 @@
5658
Grid.Column="2"
5759
ImageBackgroundHoverBrush="{StaticResource DarkMode_ContrastedGradient}"
5860
Image="{StaticResource SendButton}"
59-
Style="{StaticResource ImageSilhouette}"/>
61+
Style="{StaticResource ImageSilhouette}"
62+
Click="SendMessageButtonClick"/>
6063
</Grid>
6164
</Border>
6265

SyncPlayWPF/SyncPlayWPF/Pages/SessionPages/ChatSession.xaml.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,9 @@ private void OnPageLoad(object sender, RoutedEventArgs e) {
2929
}
3030

3131
private void NewChatMessage(SyncPlay.SyncPlayClient sender, SyncPlay.EventArgs.ChatMessageEventArgs e) {
32-
Console.WriteLine("NEW MESSAGE!");
3332
Dispatcher.Invoke(() => {
3433
var msgballoon = new CustomControls.ChatMessage();
35-
msgballoon.Style = (Style)this.FindResource("IncomingMessage");
34+
msgballoon.Style = e.LocallySentMessage ? (Style)this.FindResource("OutgoingMessage") : (Style)this.FindResource("IncomingMessage");
3635
msgballoon.MessageSender = e.Sender.Username;
3736
msgballoon.MessageContent = e.Message;
3837
msgballoon.MessageTime = DateTime.Now.ToString("hh:mm tt");
@@ -42,7 +41,25 @@ private void NewChatMessage(SyncPlay.SyncPlayClient sender, SyncPlay.EventArgs.C
4241

4342
MessageStack.Children.Add(msgballoon);
4443
});
45-
44+
}
45+
46+
private void SendMessageButtonClick(object sender, RoutedEventArgs e) {
47+
SendMessage();
48+
}
49+
50+
private void SendMessage() {
51+
if (!String.IsNullOrWhiteSpace(MessageBlockField.Text)) {
52+
Common.Shared.Wrapper.SyncPlayClient.SendChatMessage(MessageBlockField.Text);
53+
} else {
54+
Console.WriteLine("Ignored Blank Message");
55+
}
56+
MessageBlockField.Text = "";
57+
}
58+
59+
private void SendMessageEnterClick(object sender, KeyEventArgs e) {
60+
if (e.Key == Key.Enter) {
61+
SendMessage();
62+
}
4663
}
4764
}
4865
}

SyncPlayWPF/SyncPlayWPF/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,5 @@
5151
// You can specify all the values or you can default the Build and Revision Numbers
5252
// by using the '*' as shown below:
5353
// [assembly: AssemblyVersion("1.0.*")]
54-
[assembly: AssemblyVersion("2021.201.65.0")]
55-
[assembly: AssemblyFileVersion("2021.201.65.0")]
54+
[assembly: AssemblyVersion("2021.201.75.0")]
55+
[assembly: AssemblyFileVersion("2021.201.75.0")]

SyncPlayWPF/SyncPlayWPF/SyncPlay/EventArgs/ChatMessageEventArgs.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace SyncPlay.EventArgs {
88
public class ChatMessageEventArgs {
99
public User Sender;
1010
public String Message;
11+
public bool LocallySentMessage;
1112

1213
public ChatMessageEventArgs(User _sender, String _message) {
1314
Sender = _sender;

SyncPlayWPF/SyncPlayWPF/SyncPlay/Misc/Packets.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,17 @@ public static string CraftSetClientReadiness(bool isReady, bool manuallyInitiate
133133
var sresult = result.ToString(Newtonsoft.Json.Formatting.None) + "\r\n";
134134
return sresult;
135135
}
136+
137+
public static string CraftOutgoingChatMessage(string message) {
138+
var result = new JObject(
139+
new JProperty("Chat", message)
140+
);
141+
var sresult = result.ToString(Newtonsoft.Json.Formatting.None) + "\r\n";
142+
return sresult;
143+
}
144+
145+
146+
136147
public static string CraftSendList() {
137148
var result = new JObject(
138149
new JProperty("List", null)

SyncPlayWPF/SyncPlayWPF/SyncPlay/SyncPlayClient.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ public class SyncPlayClient {
2626
private bool Seeked = false;
2727
private bool clientIgnoreOnFly = false;
2828

29-
//TODO: Fix the issue where the client has no idea what users were in the session before joining. This crashing every time one of them sends a message.
30-
29+
3130
#region Front Facing Accessors
3231
/// <summary>
3332
/// This function will get the pause state of the client
@@ -102,6 +101,10 @@ public void AddFileToPlayList(string path) {
102101
nclient.SendMessage(Packets.CraftSetFileMessage(mfile.FilePath, mfile.Duration, mfile.Size));
103102
}
104103

104+
public void SendChatMessage(string message) {
105+
nclient.SendMessage(Packets.CraftOutgoingChatMessage(message));
106+
}
107+
105108
/// <summary>
106109
/// This is the constructor to the client class
107110
/// </summary>
@@ -286,6 +289,7 @@ private void NewIncomingMessage(NetworkClient sender, string message) {
286289
User s;
287290
if (!UserDictionary.TryGetValue(username, out s)) throw new Exception($"Cannot find user {username}");
288291
var args = new EventArgs.ChatMessageEventArgs(s, chatmessage);
292+
args.LocallySentMessage = username.Equals(this.Username);
289293
OnNewChatMessage(this, args);
290294
}
291295
}

SyncPlayWPF/SyncPlayWPF/Themes/Generic.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@
564564
TextWrapping="WrapWithOverflow"
565565
Background="Transparent"
566566
Foreground="{StaticResource DarkMode_TextColorF}"
567-
Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Text}"
567+
Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Text,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
568568
Width="{Binding Path=ActualWidth, ElementName=ContainerGrid}"
569569
MaxWidth="{Binding Path=ActualWidth, ElementName=ContainerGrid}">
570570

0 commit comments

Comments
 (0)