Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
        }
Пример #8
0
 protected abstract void OnRemoveMember(CharacterObject character);
Пример #9
0
 protected abstract void OnAddMember(CharacterObject character);
Пример #10
0
 /// <summary>
 /// Returns whether the supplied <see cref="CharacterObject"/> is a member.
 /// </summary>
 public bool HasMember(CharacterObject character)
 {
     return(members.ContainsKey(character.Sequence));
 }
Пример #11
0
 public bool HasMember(CharacterObject character)
 {
     return(members.Any(m => m == character));
 }