/// <summary> /// /// </summary> public void CharacterSignOut(string account, CharacterObject character) { if (!friendList.ContainsKey(account)) { return; } friendList[account].Remove(character); NetworkObject characterSignOut = new NetworkObject(); characterSignOut.AddField(0, NetworkObjectField.CreateIntField((int)ServerFriendAction.SignOut)); characterSignOut.AddField(1, NetworkObjectField.CreateStringField(account)); characterSignOut.AddField(2, NetworkObjectField.CreateObjectField(character.ToNetworkObject())); owner.EnqueuePacket(new ServerObjectPacket(ObjectOpcode.FriendList, characterSignOut, false)); }
/// <summary> /// /// </summary> public void CharacterSignIn(string account, CharacterObject character) { if (!friendList.ContainsKey(account)) { return; } friendList[account].Add(character); NetworkObject characterSignIn = new NetworkObject(); characterSignIn.AddField(0, NetworkObjectField.CreateIntField((int)ServerFriendAction.SignIn)); characterSignIn.AddField(1, NetworkObjectField.CreateStringField(account)); characterSignIn.AddField(2, NetworkObjectField.CreateObjectField(character.ToNetworkObject())); owner.EnqueueMessage(ObjectOpcode.FriendList, characterSignIn); }
/// <summary> /// Broadcast text message from <see cref="CharacterObject"/> to all members. /// </summary> public void BroadcastMessage(CharacterObject character, string message) { if (!HasMember(character)) { return; } var channelMessage = new NetworkObject(); channelMessage.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Message)); channelMessage.AddField(1, NetworkObjectField.CreateObjectField(character.ToNetworkObject())); channelMessage.AddField(2, NetworkObjectField.CreateStringField(name)); channelMessage.AddField(3, NetworkObjectField.CreateStringField(message)); channelMessage.AddField(4, NetworkObjectField.CreateStringField(GetShortcut())); BroadcastMessage(ObjectOpcode.Channel, channelMessage); }
protected override void OnRemoveMember(CharacterObject character) { Session session = NetworkManager.FindSessionByCharacter(character); if (session != null) { session.Channels.Remove(this); var channelLeave = new NetworkObject(); channelLeave.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Leave)); channelLeave.AddField(1, NetworkObjectField.CreateStringField(name)); channelLeave.AddField(2, NetworkObjectField.CreateStringField(GetShortcut())); session.EnqueueMessage(ObjectOpcode.Channel, channelLeave); } members.Remove(character.Sequence); }
protected override void OnAddMember(CharacterObject character) { Session session = NetworkManager.FindSessionByCharacter(character); if (session == null) { return; } session.Channels.Add(this); var channelJoin = new NetworkObject(); channelJoin.AddField(0, NetworkObjectField.CreateIntField((int)ServerChannelAction.Join)); channelJoin.AddField(1, NetworkObjectField.CreateStringField(name)); channelJoin.AddField(2, NetworkObjectField.CreateStringField(GetShortcut())); session.EnqueueMessage(ObjectOpcode.Channel, channelJoin); members.Add(character.Sequence, character); }
protected override void OnRemoveMember(CharacterObject character) { NetworkObject fellowshipMemberLeave = new NetworkObject(); fellowshipMemberLeave.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberLeave)); fellowshipMemberLeave.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject())); fellowshipMemberLeave.AddField(2, NetworkObjectField.CreateUShortField((ushort)character.Sequence)); BroadcastMessage(ObjectOpcode.Fellowship, fellowshipMemberLeave); members.Remove(character.Sequence); Session session = NetworkManager.FindSessionByCharacter(character); if (session != null) { session.Fellowships.Remove(this); NetworkObject fellowshipLeave = new NetworkObject(); fellowshipLeave.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.Leave)); fellowshipLeave.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject())); session.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipLeave); } }
protected override void OnAddMember(CharacterObject character) { Session session = NetworkManager.FindSessionByCharacter(character); if (session == null) { return; } NetworkObject fellowshipJoin = new NetworkObject(); fellowshipJoin.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.Join)); fellowshipJoin.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject())); session.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipJoin); // send existing members to new member foreach (CharacterObject existingCharacter in members.Values) { NetworkObject fellowshipMemberJoinExisting = new NetworkObject(); fellowshipMemberJoinExisting.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberJoin)); fellowshipMemberJoinExisting.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject())); fellowshipMemberJoinExisting.AddField(2, NetworkObjectField.CreateObjectField(existingCharacter.ToNetworkObject())); session.EnqueueMessage(ObjectOpcode.Fellowship, fellowshipMemberJoinExisting); } members.Add(character.Sequence, character); session.Fellowships.Add(this); // send new member to existing members NetworkObject fellowshipMemberJoin = new NetworkObject(); fellowshipMemberJoin.AddField(0, NetworkObjectField.CreateIntField((int)FellowshipAction.MemberJoin)); fellowshipMemberJoin.AddField(1, NetworkObjectField.CreateObjectField(Info.ToNetworkObject())); fellowshipMemberJoin.AddField(2, NetworkObjectField.CreateObjectField(character.ToNetworkObject())); BroadcastMessage(ObjectOpcode.Fellowship, fellowshipMemberJoin); }
protected abstract void OnRemoveMember(CharacterObject character);
protected abstract void OnAddMember(CharacterObject character);
/// <summary> /// Returns whether the supplied <see cref="CharacterObject"/> is a member. /// </summary> public bool HasMember(CharacterObject character) { return(members.ContainsKey(character.Sequence)); }
public bool HasMember(CharacterObject character) { return(members.Any(m => m == character)); }