<Label FontSize="20" FontWeight="Normal" Foreground="Blue" Height="35"
HorizontalAlignment="Right" Margin="0,172,38,0" Name="lblChessColor"
SnapsToDevicePixels="True" VerticalAlignment="Top" Width="117" />
<Label FontSize="20" FontWeight="Normal" Foreground="Red" Height="35"
HorizontalAlignment="Right" Margin="0,225,38,0" Name="lblPlayer"
SnapsToDevicePixels="True" VerticalAlignment="Top" Width="343" />
</Grid>
</Window>
可以通过SBMessageHandler的SendTextMessage方法向联系人发送文本信息。但该方法需要一个TextMessage对象来封装要发送的文本信息。发送文本信息的功能由SendInput方法来完成,代码如下:
private void SendInput(String msg)
{
// 不能发送空字符串
if (msg.Length == 0) return;
// 封装要发送的文本信息
TextMessage message = new TextMessage(msg);
// 向联系人发送文本信息
itemObject.switchboard.SendTextMessage(message);
}
如果游戏的一方先打开游戏窗口,当第一次向对方发送聊天信息或走一步棋后,对方的五子棋程序也会打开一个类似图4所示的游戏窗口。打开该游戏窗口的代码需要放在接收聊天信息的事件中,代码如下:
private void TextMessageReceived(object sender, TextMessageEventArgs e)
{
// 如果发送的是命令字符串,不弹出聊天窗口
// COMMAND_PREFIX为命令信息的前缀
if (e.Message.Text.StartsWith(Game.COMMAND_PREFIX))
return;
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (ThreadStart)delegate
{
ItemObject itemObject = null;
// 从联系人列表中查找相应的联系人节点。
foreach (TreeViewItem tvGroupItem in tvContactList.Items)
{
foreach (TreeViewItem tvContractItem in tvGroupItem.Items)
{
ItemObject item = (ItemObject)tvContractItem.Tag;
// 使用E-mail来判断联系人是否相同
if (item.contact.Mail.Equals(e.Sender.Mail))
{
itemObject = item;
if (item.game != null)
{
// 如果该联系人的游戏窗口已经打开,将该窗口设为焦点状态
itemObject.game.Show();
return;
}
break;
}
}
if (itemObject != null) break;
}
|