コード例 #1
0
        private OperationResponse HandleOperationRegisterWorld(OperationRequest operationRequest)
        {
            var operation = new RegisterWorld(Protocol, operationRequest);

            if (!operation.IsValid)
            {
                return new OperationResponse(operationRequest.OperationCode)
                       {
                           ReturnCode = (short)ResultCode.InvalidOperationParameter, DebugMessage = operation.GetErrorMessage()
                       }
            }
            ;

            if (!social.AddWorld(operation.WorldId, this))
            {
                return new OperationResponse(operationRequest.OperationCode)
                       {
                           ReturnCode = (short)ResultCode.AlreadyRegistered
                       }
            }
            ;

            lock (listeningWorlds)
                this.listeningWorlds.Add(operation.WorldId);

            return(null);
        }
コード例 #2
0
ファイル: Listener.cs プロジェクト: sNakiex/reAPB
        private void handleWorld(object client)
        {
            TcpClient     tcpClient    = (TcpClient)client;
            World         world        = new World(tcpClient);
            NetworkStream clientStream = tcpClient.GetStream();

            byte[] message = new byte[4096];
            int    bytesRead;

            while (true)
            {
                bytesRead = 0;
                try
                {
                    bytesRead = clientStream.Read(message, 0, 4096);
                }
                catch
                {
                    break;
                }
                if (bytesRead == 0)
                {
                    break;
                }

                IPacket packet = null;
                switch (message[0])
                {
                case (byte)OpCodes.WL_REGISTER_WORLD: packet = new RegisterWorld(); break;

                case (byte)OpCodes.WL_SET_DATA: packet = new SetData(); break;
                }
                packet.Write(message, 1, bytesRead - 1);
                packet.Handle(world);
            }
            Log.Error("World.Listener", world.Name + " disconnected!");
            try
            {
                Program.worlds.Remove((byte)world.Id);
                lock (Worlds)
                {
                    Worlds.Remove(world.Id);
                }
                tcpClient.Close();
            }
            catch (Exception e)
            {
                Log.Error("World.Listener", "Failed to remove disconnected world, exception:\n\n");
                Console.WriteLine(e.ToString());
                return;
            }
        }