コード例 #1
0
ファイル: CastChannel.cs プロジェクト: SyncZone/IndieAPI
 public void Broadcast(StreamBuffer packet, User except = null)
 {
     foreach (User user in Users)
     {
         if (user != except)
             user.SendPacket(packet.Clone());
     }
 }
コード例 #2
0
ファイル: UserManager.cs プロジェクト: SyncZone/IndieAPI
        public User GetUser(Int32 userNo)
        {
            User user = FindUser(userNo);
            if (user != null)
                return user;

            user = FindUser(userNo);
            if (user == null)
            {
                user = new User(userNo);
                _users.Add(userNo, user);
            }

            return user;
        }
コード例 #3
0
ファイル: CastChannel.cs プロジェクト: SyncZone/IndieAPI
        public void Enter(User user)
        {
            if (Channels.Contains(this) == false)
                throw new AegisException(ResultCode.IMC_InvalidChannelNo);

            if (Users.Contains(user) == true)
                throw new AegisException(ResultCode.IMC_ExistsUser);

            Users.Add(user);
        }
コード例 #4
0
ファイル: CastChannel.cs プロジェクト: SyncZone/IndieAPI
 public void Leave(User user)
 {
     Users.Remove(user);
     RemoveChannel(this);
 }
コード例 #5
0
ファイル: UserProfile.cs プロジェクト: SyncZone/IndieAPI
 public UserProfile(User user)
 {
     _user = user;
 }
コード例 #6
0
ファイル: TextBox.cs プロジェクト: SyncZone/IndieAPI
 public TextBox(User user)
 {
     _user = user;
 }
コード例 #7
0
ファイル: LoginCounter.cs プロジェクト: SyncZone/IndieAPI
 public LoginCounter(User user)
 {
     _user = user;
 }
コード例 #8
0
ファイル: UserManager.cs プロジェクト: SyncZone/IndieAPI
 private void RemoveUser(User user)
 {
     user.Logout();
        _users.Remove(user.UserNo);
 }
コード例 #9
0
ファイル: ClientSession.cs プロジェクト: SyncZone/IndieAPI
        private void OnReceived(Session session, StreamBuffer buffer)
        {
            SecurePacketRequest reqPacket = new SecurePacketRequest(buffer);
            reqPacket.Decrypt(_aesIV, _aesKey);
            reqPacket.SkipHeader();

            try
            {
                //  Authentication Packets
                if ((reqPacket.PacketId >> 8) == 0x20)
                {
                    reqPacket.Dispatch(this, "On" + Protocol.GetName(reqPacket.PacketId));
                }

                //  Contents Packets
                else
                {
                    _user = UserManager.Instance.FindUser(reqPacket.UserNo);
                    if (_user == null)
                    {
                        ForceClose("Invalid UserNo.");
                        return;
                    }
                    if (_user.LastSeqNo + 1 != reqPacket.SeqNo)
                    {
                        ForceClose("Invalid Sequence Number.");
                        return;
                    }

                    _user.LastSeqNo = reqPacket.SeqNo;
                    _user.Session = this;
                    _user.LastPulse.Restart();

                    reqPacket.Dispatch(this, "On" + Protocol.GetName(reqPacket.PacketId));
                }
            }
            catch (AegisException e) when (e.ResultCodeNo == AegisResult.BufferUnderflow)
            {
                Logger.Write(LogType.Err, 2, "Packet buffer underflow(PID=0x{0:X}).", reqPacket.PacketId);
            }
        }
コード例 #10
0
ファイル: ClientSession.cs プロジェクト: SyncZone/IndieAPI
 private void OnClosed(Session session)
 {
     _user?.Logout();
     _user = null;
 }