private static void HandleEventGroupMemberAdded(IRpcProtocol protocol, IEventData eventData) { var groupMemberAdded = new GroupMemberAdded(protocol, eventData); if (!groupMemberAdded.IsValid) { _logger.ErrorFormat("[HandleEventGroupMemberAdded]: Received an invalid {0}", eventData.GetType()); return; } MmoWorld.Instance.PrimaryFiber.Enqueue(() => DoGroupMemberAdded(groupMemberAdded)); }
private static void DoGroupMemberAdded(GroupMemberAdded groupMemberAdded) { Group group; if (!GroupManager.Instance.TryGetGroup(groupMemberAdded.GroupGuid, out group)) { _logger.WarnFormat("[DoGroupMemberAdded]: Group (Guid={0}) not found.", groupMemberAdded.GroupGuid); return; } group.AddMember(groupMemberAdded.MemberInfo); }
private OperationResponse HandleOperationLeaveWorld(OperationRequest operationRequest) { var operation = new LeaveWorld(Protocol, operationRequest); if (!operation.IsValid) { return new OperationResponse(operationRequest.OperationCode) { ReturnCode = (short)ResultCode.InvalidOperationParameter, DebugMessage = operation.GetErrorMessage() } } ; SocialSession session; if (social.SessionCache.TryGetSessionBySessionId(operation.SessionId, out session)) { session.LeaveWorld(operation.WorldId); } return(null); } #endregion #region Implementation of IWorld /// <summary> /// Gets the group manager /// </summary> IGroupManager IWorld.GroupManager { get { return(this); } } #endregion #region Implementation of IGroupManager void IGroupManager.FormGroup(MmoGuid groupGuid, GroupMemberStructure leader) { var groupFormed = new GroupFormed { GroupGuid = groupGuid, LeaderInfo = leader, }; this.SendEvent(new EventData((byte)ServerEventCode.GroupFormed, groupFormed), new SendParameters()); this.DoAddMember(groupGuid, leader); } void IGroupManager.DisbandGroup(MmoGuid groupGuid) { var groupDisbanded = new GroupDisbanded { GroupGuid = groupGuid, }; this.SendEvent(new EventData((byte)ServerEventCode.GroupDisbanded, groupDisbanded), new SendParameters()); } void IGroupManager.AddMember(MmoGuid groupGuid, GroupMemberStructure member) { this.DoAddMember(groupGuid, member); } void DoAddMember(MmoGuid groupGuid, GroupMemberStructure member) { SocialSession session; if (social.SessionCache.TryGetSessionBySessionName(member.Name, out session)) { var groupMemberAddedSession = new GroupMemberAddedSession { GroupGuid = groupGuid, MemberInfo = member, SessionId = session.SessionId }; this.SendEvent(new EventData((byte)ServerEventCode.GroupMemberAddedSession, groupMemberAddedSession), new SendParameters()); } else { var groupMemberAdded = new GroupMemberAdded { GroupGuid = groupGuid, MemberInfo = member, }; this.SendEvent(new EventData((byte)ServerEventCode.GroupMemberAdded, groupMemberAdded), new SendParameters()); } } void IGroupManager.RemoveMember(MmoGuid groupGuid, MmoGuid memberGuid) { var groupMemberRemoved = new GroupMemberRemoved { GroupGuid = groupGuid, MemberGuid = memberGuid, }; this.SendEvent(new EventData((byte)ServerEventCode.GroupMemberRemoved, groupMemberRemoved), new SendParameters()); } void IGroupManager.UpdateMemberStatus(MmoGuid groupGuid, MmoGuid memberGuid, OnlineStatus status) { switch (status) { case OnlineStatus.Online: var groupMemberOnline = new GroupMemberOnline { GroupGuid = groupGuid, MemberGuid = memberGuid, }; this.SendEvent(new EventData((byte)ServerEventCode.GroupMemberOnline, groupMemberOnline), new SendParameters()); break; case OnlineStatus.Offline: var groupMemberOffline = new GroupMemberOffline { GroupGuid = groupGuid, MemberGuid = memberGuid, }; this.SendEvent(new EventData((byte)ServerEventCode.GroupMemberOffline, groupMemberOffline), new SendParameters()); break; } } #endregion }